2017-05-02 4 views
0

아래 코드는 Odoo에서 제품 가져 오기 버튼을 누르면 실행되는 함수입니다. 이 스크립트는 CSV 파일에서 Odoo의 제품을 가져옵니다. csv 파일을 먼저 업로드 한 다음 가져 오기 버튼을 클릭 할 수 있습니다. 내가 할 수없는 것은 xlsx 파일을 업로드하고 가져 오기를 클릭 할 때 파일이 유효하지 않다는 경고를받는 것입니다. 누군가 xlsx 파일에서도 가져 오기를 활성화하는 방법을 알려 줄 수 있습니까? 당신이 .xlsx 파일에 대처하기 위해 csv.DictReader을 기대하고있는 것처럼 당신의 묘사에서Python 스크립트를 통해 Odoo에서 xlsx 파일 가져 오기

@api.one 
def action_import(self): 
    ctx = self._context 
    data = base64.b64decode(self.data) 
    file_input = cStringIO.StringIO(data) 
    file_input.seek(0) 
    row = [] 
    result = {} 
    if self.delimeter: 
     delimeter = str(self.delimeter) 
    else: 
     delimeter = ',' 
    fieldnames = ['supplier_default_code', 'name', 'product_brand', 'supplier', 'standard_price', 'list_price', 
        'internal_category', 'spare_part', 'service_part', 'default_code', 'supplierinfo_product_name', 
        'rrp_price', 'min_qty', 'weight', 'net_weight', 'volume', 'height', 'width', 'depth', 'delay', 
        'warranty_type', 'warranty', 'sale_delay', 'description', 'description_sale', 
        'description_delivery', 'ean'] 
    reader = csv.DictReader(file_input, delimiter=delimeter, fieldnames=fieldnames) 
    try: 
     row.extend(reader) 
    except Exception: 
     raise exceptions.Warning(_("Not a valid file!")) 
    keys = row[0] 
    self.create_products_from_array(row) 
+0

''csv module '을 사용하여'xlsx'를 읽을 수 없습니다. ** python xlsx **에 대한'xlsx' 검색을 읽으려면. – stovfl

답변

1

가 보인다. 하지만 이는 .csv 파일과 완전히 다른 것입니다. 엑셀이 둘 다 열 수 있다는 사실은 그것들이 상호 교환 가능하다는 것을 의미하지 않는다.

xlrd 모듈을 사용해 볼 수 있습니다. 그러나 완전히 다른 구현이 될 것입니다. 모듈은 csv.DictReader의 드롭 인 대체품을 제공하지 않습니다.

유일한 대안은 .xlsx 파일을 사전 처리하여 코드에서 예상하는 .csv으로 변환하는 것입니다. 이 경우 xlrd을 사용하거나 Excel에서 VBA 매크로를 작성하여이를 수행 할 수 있습니다. 실제로 그것을 할 수있는 십여 가지 방법이있을 수 있습니다.