How to extract sheet from *.xlsm and save it as *.csv in Python?

前端 未结 3 1632
悲&欢浪女
悲&欢浪女 2021-01-05 11:03

I have a *.xlsm file which has 20 sheets in it. I want to save few sheets as *.csv (formatting loss is fine) individually. Already tried xlrd-xlwt and win32com libraries b

相关标签:
3条回答
  • 2021-01-05 11:18

    xlrd should work fine on xlsm files as well. I tested the code with a random xlsm file, and it worked perfectly.

    import csv
    import xlrd
    
    workbook = xlrd.open_workbook('test.xlsx')
    for sheet in workbook.sheets():
        with open('{}.csv'.format(sheet.name), 'wb') as f:
            writer = csv.writer(f)
            writer.writerows(sheet.row_values(row) for row in range(sheet.nrows))
    

    If you've encoding issues, try the code below:

    import csv
    import xlrd
    
    workbook = xlrd.open_workbook('test.xlsm')
    for sheet in workbook.sheets():
        if sheet.name == "Sheet_name_from_xlsm_file":
            with open('{}.csv'.format(sheet.name), 'wb') as f:
                writer = csv.writer(f)
                for row in range(sheet.nrows):
                    out = []
                    for cell in sheet.row_values(row):
                        try:
                            out.append(cell.encode('utf8'))
                        except:
                            out.append(cell)
                    writer.writerow(out)
    
    0 讨论(0)
  • 2021-01-05 11:36
    import pandas as pd
    
    # YOU MUST PUT sheet_name=None 
    df = pd.read_excel('YourFile.xlsm', sheet_name=None)
    
    # prints all sheets
    print(df)
    
    0 讨论(0)
  • 2021-01-05 11:38

    You can do this easily with pandas

    1. Install pandas and xlrd dependencies by following

      • pip3 install pandas
      • pip3 install xlrd (required by pandas)
    2. Now simply read xlsm file using read_excel. Here is a demo:-

    import pandas as pd
    
    # YOU MUST PUT sheet_name=None TO READ ALL CSV FILES IN YOUR XLSM FILE
    df = pd.read_excel('YourFile.xlsm', sheet_name=None)
    
    # prints all sheets
    print(df)
    
    # prints all sheets name in an ordered dictionary
    print(df.keys())
    
    # prints first sheet name or any sheet if you know it's index
    first_sheet_name = list(df.keys())[0]
    print(first_sheet_name)
    
    # prints first sheet or any sheet if know it's name
    print(df[first_sheet_name])
    
    # export first sheet to file
    df[first_sheet_name].to_csv('FirstSheet.csv')
    
    # export all sheets 
    for sheet_name in list(df.keys()):
       df[sheet_name].to_csv(sheet_name + 'Sheet.csv')
    
    
    # USE IT IN MULTIPLE WAYS #
    
    0 讨论(0)
提交回复
热议问题