Search code examples
excelopenpyxlxlrdxlsxwriter

Issue about transfer sheet through xlrd or openpyxl to xlsxwriter


Now i'm using xlsxwriter to read data from csv files and making charts as information. but now i want to add another worksheet from another xlsx file. Which module can i use to copy it, xlrd or openpyxl?

i have do some several testing like:

 workbook_template = openpyxl.load_workbook('Test_template.xlsx')
 cover_template = workbook_template.get_sheet_by_name('Cover')
 worksheet_cover = Report.add_worksheet("Cover")
 worksheet_cover = cover_template

but it didn't work, can anyone teach me how to make it work? thanks


Solution

  • I have an example below that uses xlsxwriter to create a worksheet with a chart, and then using openpyxl reads in this existing workbook and adds a new worksheet.

    I'm using the latest version of openpyxl downloaded from here. If you're using an older version you may loose your chart based on what I've been reading here.

    import xlsxwriter
    from openpyxl import Workbook
    from openpyxl import load_workbook
    
    #modified example from xlsxwriter documentation at http://xlsxwriter.readthedocs.io/chart.html
    data = [
        [1, 2, 3, 4, 5],
        [2, 4, 6, 8, 10],
        [3, 6, 9, 12, 15],
    ]
    
    workbook = xlsxwriter.Workbook('Test_template.xlsx')
    worksheet = workbook.add_worksheet()
    
    chart = workbook.add_chart({'type': 'column'})
    
    worksheet.write_column('A1', data[0])
    worksheet.write_column('B1', data[1])
    worksheet.write_column('C1', data[2])
    
    chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
    chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
    chart.add_series({'values': '=Sheet1!$C$1:$C$5'})
    
    worksheet.insert_chart('A10', chart)
    
    workbook.close()
    
    #opening xlsxwriter created workbook with openpyxl and adding a sheet
    
    workbook = load_workbook('Test_template.xlsx')
    worksheet = workbook.create_sheet('new_sheet')
    worksheet["A1"] = "Putting some text in"
    workbook.save('Test_template.xlsx')