Reputation: 559
import xlsxwriter
import csv
wb = xlsxwriter.Workbook('output.xlsx',
{ 'strings_to_numbers': True})
ws = wb.add_worksheet( 'output')
row = col = 2
ws.write_number(row,col,float(5.71))
ws.write_formula('D3','=C3*0.5')
wb.close()
Hello, I am trying to do some formulas on excel,I can't seem to implement the functions on the cells (in this case D3), However,when I change the number in excel (manually) the function is applied.
I don't have Errors when I run, but the formula aren't being Applied directly, I have to manually enter them (in excel) for the function to be applied
How can I solve this?
Upvotes: 1
Views: 67
Reputation: 41574
I don't have Errors when I run, but the formula aren't being Applied directly,
For what it is worth I don't see this issue. When I run your program I get the following output with the expected result:
There can be issues displaying formula results with non-Excel applications, which is explained in the Working with Formulas - Formula Results section of the XlsxWriter documentation. However, these issues shouldn't happen with Excel.
Upvotes: 0
Reputation: 838
If you can't find a way to solve it in xlsxwriter, I suggest you try out openpyxl. It operates in a very similar way and solves your problem
import openpyxl
path = "\path\to\your\file.xlsx"
workbook = openpyxl.load_workbook(path)
worksheet = workbook["name of your sheet"]
cell1 = worksheet("C3")
cell1.value = 5.71
cell2 = worksheet("D3")
cell2.value = "=C3*0.5"
workbook.save(path)
Upvotes: 1
Reputation: 16505
You can pass a optional value to the method .write_formula()
, so that the value is shown when opening the workbook; not every program calculates the formulas when opening the workbook, some only calculate when one of the involved cells is modified.
Citing the docs I linked above:
If required, it is also possible to specify the calculated result of the formula using the optional value parameter. This is occasionally necessary when working with non-Excel applications that don’t calculate the result of the formula
You could try this:
# we need to pass a cell format to 'write_formula()' to pass a calculated value
cell_format1 = wb.add_format()
row = col = 2
v = float(5.71)
ws.write_number(row, col, v)
ws.write_formula('D3', '=C3*0.5', cell_format1, v)
Upvotes: 1