如何使用python和xlsxwriter将欧洲风格的时间转换为美国风格

vlf7wbxs  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(252)

我有一组形式为“22,4”而不是“22.4”的温度。我是python新手(几天前刚开始),正在编写一个程序,将csv文件转换为xlsx文件,并绘制一些数据。
文件最初用分号分隔。目前,我已经修改了一组嵌套for循环来编写xlsx文件,但是温度数据如上所述。

def graph_file():
    workbook = xlsxwriter.workbook.Workbook("New File.xlsx", {'strings_to_numbers': True})
    for file in files:
        sheet = workbook.add_worksheet("Sheet1")
        with open(file) as f:
            reader = csv.reader(f, delimiter=";")
            for r, row in enumerate(reader):
                for c, val in enumerate(row):
                    one_plus = r + 1
                    sheet.write(r, c, val)
                    sheet.write("AZ1", "Time")
                    sheet.write("AR1", "Temperature")
                    sheet.write("AZ" + str(one_plus), str(datetime.timedelta(seconds=r)))
                    sheet.write('AT' + str(one_plus), '=NUMBERVALUE(AQ' + str(one_plus) + ', ",", ".")')

这是我现在所拥有的可以使用的东西,但是excel一直在我的公式前面添加一个@符号,我得到一个#名称?错误。

有没有更好的方法来解决这个问题,或者有没有人能快速解决excel问题,我可以将其添加到我的代码中?谢谢

nxowjjhe

nxowjjhe1#

以下是一种可能的方法,当使用 csv.reader() 一切都是字符串,您可以根据需要将其转换为数字:

def graph_file():
    workbook = xlsxwriter.workbook.Workbook("New File.xlsx", {'strings_to_numbers': True})

    for file in files:
        sheet = workbook.add_worksheet("Sheet1")
        sheet.write("AZ1", "Time")
        sheet.write("AR1", "Temperature")

        with open(file) as f:
            reader = csv.reader(f, delimiter=";")

            for r, row in enumerate(reader):
                print(row)

                for c, val in enumerate(row):
                    if r > 0:
                        if ',' in val:
                            val = float(val.replace(',', '.'))
                        else:
                            val = int(val)

                    one_plus = r + 1
                    sheet.write(r, c, val)
                    sheet.write("AZ" + str(one_plus), str(datetime.timedelta(seconds=r)))
                    sheet.write('AT' + str(one_plus), '=NUMBERVALUE(AQ' + str(one_plus) + ', ",", ".")')

        workbook.close()

这将忽略标题行,然后将任何值转换为整数。如果看到逗号,它将用句点替换它,并将字符串转换为浮点。
这个 =NUMBERVALUE() 这样就不需要了。
我会移动你的 AZ1AR1 在循环外写入,因为它们不会更改。

相关问题