-1

代码是拉然后放 excel 公式,而不是公式的计算数据。

xxtab.write(8, 3, "=H9+I9")

当它被读入并存储在那个单独的文件中时,它被存储为“=H9+I9”,而不是 H9 + I9 的实际值。然后,当我们将其导入回来时,它仍然没有计算 H9 + I9 实际上是什么,而是只是将“= H9 + I9”重新粘贴到 excel 中。

预期目标是在导出期间、导出之后但在导入另一个文件之前或在导入期间完成数学运算。

代码不应该只是将另一个数学函数/公式放入下一个 Excel 表中。它应该回答正在阅读的任何内容。

import xlsxwriter, string, csv, time, datetime, subprocess, os
import urllib, urllib2, requests, openpyxl, sys
import gspread

# grab files
workbook = '/path/to/the/WorkBook.xlsx'

# Setup the spreadsheet
print "Creating workbook"
book = xlsxwriter.Workbook(workbook, {'strings_to_numbers': True})

# set matrix
row = 0  # row number
col = 0  # Column letter A=0 B=1 C=2 D=3...Z=26 ect.
# var.write(row, col, value, format)

# Make the sheet
xxtab = book.add_worksheet('DB Tables')

#Example of some .write commands which write to xxtab. The variables are taken directly from excel and are being read in by xlsl reader. This is stored in another file and is read in by the for loop.
xxtab.write(8, 1, "T_ACCESSRULES")
xxtab.write(8, 3, "=H9+I9")
xxtab.write(8, 7, "=data_dbmetrics!B56")

# The for loop, reads in a .txt file and does multiple .write commands
with open('/path/to/my/file/interns_xxtables.txt', 'rb') as f:
    reader = csv.reader(f, delimiter='\t')
    for c, col in enumerate(reader):
        if(len(col) > 3):
            if (str(col[3]) == "bold"):
                xxtab.write(int(col[0]), int(col[1]), col[2], bold)
            elif (col[3] == "metric"):
                xxtab.write(int(col[0]), int(col[1]), col[2], metric)
            elif (col[3] == "title"):
                xxtab.write(int(col[0]), int(col[1]), col[2], title)
        else:
            xxtab.write(int(col[0]), int(col[1]), col[2])
f.close()

抱歉,我是 Stack Overflow 的新手。我不确定如何描述这个问题。我不知道如何得到我想要的,我只知道我想要的不是我所写的。

4

1 回答 1

1

预期目标是在导出期间、导出之后但在导入另一个文件之前或在导入期间完成数学运算。

XlsxWriter 是显示编写 Excel 文件的模块,它不会评估它编写的公式的结果。如果您在代码中计算结果,您可以在编写公式时添加它:

xxtab.write(8, 3, "=H9+I9", 42)

这在 XlsxWriter 文档的使用公式部分中有更详细的解释。

Python Excel 文件编写模块都没有评估公式。唯一可以做到这一点的模块是自动化 Excel 的模块,例如XlWings

于 2016-10-25T22:04:34.860 回答