2017-05-08 89 views
1

我从csv数据创建了一个工作表,我想创建一个新的工作表并将所有(十六进制)数据转换为十进制格式。我的问题是如何将每个单元格映射到工作表1并将其全部放入工作表2中,其中唯一的区别是单元格上的= HEX2DEC(..)。Python xlsxwriter - hex2dec多个单元格

from xlsxwriter.workbook import Workbook 




for csvfile in ['hexData']: 
    workbook = Workbook(csvfile + '.xlsx') 
    worksheet = workbook.add_worksheet('hexSheet') 
    worksheet2 = workbook.add_worksheet('decSheet') 
    with open(csvfile, 'rb') as f: 
      reader = csv.reader(f) 
      for r, row in enumerate(reader): 
       for c, col in enumerate(row): 
        worksheet.write(r, c, col) 

    with open(csvfile, 'rb') as f: 
      reader = csv.reader(f) 
      for r, row in enumerate(reader): 
       for c, col in enumerate(row): 
        worksheet2.write_formula(r, c, 'HEX2DEC(hexSheet!A2:hexSheet!F16)') 

结果是#VALUE!在dec工作表的所有单元格上。当我手动应用该公式时,会发生同样的问题,所以它可能是我对公式本身应用于多个单元格的误解。

对此会感激一些方向。

干杯

+0

'='缺少。尝试写引文,例如''“= HEX2DEC(...”''。另外,如果你的系统是非英文的,请注意Excel函数名是本地化的(翻译过的)。 – handle

+0

是的,我的意思是不包括=也包含它。工作仍然 – arsenal88

+0

你不必打开文件两次,你可以同时写入'工作表' – stovfl

回答

2

当我申请的是手动式同样的问题发生所以它可能是我误会的公式本身适用于多种细胞。

正确。如果公式在Excel it isn't going to be valid in a file created by XlsxWriter中无效。

这种情况下的问题是,Excel中的HEX2DEC()只接受一个单一的值,并且您将它传递给一个范围。所以你需要这样的东西:

worksheet2.write_formula(r, c, 'HEX2DEC(hexSheet!A2') 

这是一个基于你的完整的工作示例。

import csv 
from xlsxwriter.workbook import Workbook 
from xlsxwriter.utility import xl_rowcol_to_cell 

for csvfile in ['hexData.csv']: 
    workbook = Workbook(csvfile + '.xlsx', {'strings_to_numbers': True}) 

    worksheet_hex = workbook.add_worksheet('hexSheet') 
    worksheet_dec = workbook.add_worksheet('decSheet') 

    with open(csvfile, 'rb') as f: 
     reader = csv.reader(f) 
     for r, row in enumerate(reader): 
      for c, col in enumerate(row): 
       worksheet_hex.write(r, c, col) 
       worksheet_dec.write_formula(r, c, 'HEX2DEC(hexSheet!%s)' % 
                xl_rowcol_to_cell(r, c)) 

    workbook.close() 

输出

enter image description here

注:

另请注意,您可能更适合在Python中执行hex2dec转换,而不是使用Excel公式。

+0

感谢您的反馈,我试了你的方式,并使用worksheet_dec.write_formula(r,c,'HEX2DEC(hexSheet! %s)'%xl_rowcol_to_cell(r,c)),但是生成的表格会提供一切#REF! – arsenal88

+0

我只是将所有内容转换为Python,但由于我设计代码的方式,我似乎无法做到这一点。我正在创建一个CSV文件,在写入文件时,我似乎无法将字符串转换为任何字符串。然后,我读取该文件并从那里创建xlsx ...如果尝试执行任何int(val, 16)转换它拧起来.. – arsenal88

+0

@ arsenal88我添加了一个输出图像来显示代码的工作。一个' Excel中的#REF!错误通常是由无效的单元格引用引起的。尝试修复Excel中的错误,并将相同的修复程序应用于您的程序。 – jmcnamara