2017-05-08 42 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