9

I was trying the following code that I found.

import pandas as pd
import xlsxwriter
data = {'Name': ['John', 'Jane', 'Adam'], 'Age': [25, 30, 35], 'Gender': ['M', 'F', 'M']}
df = pd.DataFrame(data)

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')

workbook = writer.book
worksheet = writer.sheets['Sheet1']

# Example: Adding a chart
chart = workbook.add_chart({'type': 'line'})
chart.add_series({'values': '=Sheet1.$B$2:$B$4'})
worksheet.insert_chart('D2', chart)
writer.save()

But I get the following error:

writer.save()
    ^^^^^^^^^^^
AttributeError: 'XlsxWriter' object has no attribute 'save'. Did you mean: '_save'?

Does anyone know how to solve it? Thanks in advance! Giuseppe

Trying to save data from a dataframe in excel file by using pandas

Ynjxsjmh
  • 28,441
  • 6
  • 34
  • 52
Straniero95
  • 101
  • 1
  • 1
  • 2
  • 1
    These might help: https://github.com/jmcnamara/XlsxWriter/issues/190 https://github.com/jmcnamara/XlsxWriter/issues/191 https://stackoverflow.com/questions/22904654/how-to-save-xlsxwriter-file-in-certain-path – imxitiz Apr 24 '23 at 10:59
  • Thanks for you answer, but I didn't find the solution to my problem. The main problem is that the code works on my old pc, while on my new pc doesn't. I though that the problema could be different version of the python libraries, but I still don't manage to find the solution. – Straniero95 Apr 26 '23 at 07:02

1 Answers1

19

The save() method has been deprecated and removed in Pandas. You should use close() instead.

With older versions of Pandas you would have gotten this warning:

FutureWarning: save is not part of the public API, usage can give unexpected results and will be removed in a future version

With more recent versions you just need to use close() like this (I also fixed the syntax for the chart values):

import pandas as pd
import xlsxwriter

data = {
    "Name": ["John", "Jane", "Adam"],
    "Age": [25, 30, 35],
    "Gender": ["M", "F", "M"],
}
df = pd.DataFrame(data)

writer = pd.ExcelWriter("output.xlsx", engine="xlsxwriter")
df.to_excel(writer, sheet_name="Sheet1")

workbook = writer.book
worksheet = writer.sheets["Sheet1"]

# Example: Adding a chart
chart = workbook.add_chart({"type": "line"})
chart.add_series({"values": "=Sheet1!$C$2:$C$4"})
worksheet.insert_chart("E2", chart)

writer.close()

Output:

enter image description here

jmcnamara
  • 38,196
  • 6
  • 90
  • 108