2016-10-25 3 views
-2

Код тянет, а затем помещает формулы excel, а не рассчитанные данные формулы.Предварительно вычислять формулы Excel при экспорте данных с помощью python?

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

Когда считывается и хранится в этом отдельном файле, он хранится в виде «= Н9 + 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() 

Извините, я новичок в переполнении стека. Я не знаю, как еще описать этот вопрос. Я не знаю, как получить то, что я хочу, я просто знаю, чего я хочу, не достигается тем, что я написал.

+1

Это не имеет большого смысла, и вы не предоставили много (никакого?) Фактического кода для продолжения. Пожалуйста, рассмотрите вопрос о [Как спросить] (http://stackoverflow.com/questions/ask) и предоставите [MCVE] (http://stackoverflow.com/help/mcve). –

+0

Когда я читаю данные из Excel, я получаю «значение ячейки», которое есть все, что было напечатано в ячейке, что является формулой. То, что мне нужно прочитать, - это то, что вычисляет формула. Поэтому, если формула добавляет два числа, две ячейки, диапазон или что-то еще, мне нужен то, что отображаемый ответ, а не формула. Надеюсь, это прояснит ситуацию. –

+1

Опять же, было бы полезно, если бы вы показали свой * фактический код * или некоторую разумную аппроксимацию. Как вы «читаете» значения? Не отвечайте мне здесь в комментариях, вернитесь и [edit] (http://stackoverflow.com/posts/40248564/edit) свой вопрос, чтобы включить эти (полезные) детали. –

ответ

1

Целью является то, чтобы математика была выполнена либо во время экспорта, после ее экспорта, а перед импортом в другой файл или во время импорта.

XlsxWriter, модуль, показанный при записи файла Excel, не оценивает результат формул, которые он пишет. Если вычислить результат в коде вы можете добавить его при написании формулы:

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

Это объясняется более подробно в разделе Working with Formulas документации XlsxWriter.

Ни один из модулей написания файлов PDF Python не оценивает формулы. Единственными модулями, которые могут это сделать, являются те, которые автоматизируют Excel, например XlWings.

+0

«Если вы вычислите результат в своем коде, вы можете добавить его при написании формулы». Это означало бы, что мне придется идти и индивидуально вычислять все формулы. Однако это также означает, что если какая-либо из этих ячеек изменит значение или изменит формулу, мне нужно будет вручную пройти и пересчитать данные. Я пытался избежать этого любой ценой, поэтому я должен заглянуть в XlWings? –

+0

Это более или менее то, что ни один из модулей, которые пишут файлы Excel с нуля, не пытается вычислить результаты формулы: для чего-либо, кроме простого вычисления, потребуется механизм работы с электронными таблицами. Итак, если вы ищете результат формулы точно так, как рассчитывает Excel, вам придется использовать модуль, который автоматизирует Excel, например Xlwings, в Windows и MacOS. (В Linux есть некоторые модули, которые также могут автоматизировать OpenOffice/Libreoffice.) – jmcnamara