Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从*.xlsm中提取工作表并在Python中将其保存为*.csv?_Python_Excel_Csv_Spreadsheet_Xlsm - Fatal编程技术网

如何从*.xlsm中提取工作表并在Python中将其保存为*.csv?

如何从*.xlsm中提取工作表并在Python中将其保存为*.csv?,python,excel,csv,spreadsheet,xlsm,Python,Excel,Csv,Spreadsheet,Xlsm,我有一个*.xlsm文件,里面有20张纸。 我想将几张图纸单独保存为*.csv(格式丢失很好)。 已尝试xlrd xlwt和Win32 COM库,但无法通过。 任何人都可以提供一个用Python进行上述处理的代码片段吗?我有其他python依赖项,因此没有其他语言可以工作。 谢谢在xlsm文件上也能正常工作。我用一个随机的xlsm文件测试了代码,它工作得非常好 import csv import xlrd workbook = xlrd.open_workbook('test.xlsx') f

我有一个*.xlsm文件,里面有20张纸。 我想将几张图纸单独保存为*.csv(格式丢失很好)。 已尝试xlrd xlwt和Win32 COM库,但无法通过。 任何人都可以提供一个用Python进行上述处理的代码片段吗?我有其他python依赖项,因此没有其他语言可以工作。 谢谢

在xlsm文件上也能正常工作。我用一个随机的xlsm文件测试了代码,它工作得非常好

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))

如果存在编码问题,请尝试以下代码:

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)
你可以用熊猫轻松做到这一点
  • 通过以下方式安装熊猫和xlrd依赖项

    • pip3安装熊猫
    • pip3安装xlrd(熊猫需要)
  • 现在只需使用read\u excel读取xlsm文件即可。下面是一个演示:-


  • 就我所记得的,所有最近的MicrosoftOffice格式都是XML打包到Zip容器中的。因此,您可能需要查看.xlsm文件源,澄清其XML结构,然后提取所需字段。如果这不起作用,您应该在可能的情况下上载数据文件。感谢您提供的代码片段!我收到此错误:writer.writerows(sheet.row_值(row)用于范围内的行(sheet.nrows))UnicodeEncodeError:'ascii'编解码器无法对位置0中的字符u'\xb5'进行编码:序号不在范围内(128)是否有方法在此处指定编码?很抱歉,无法在此处上载文件。@我认为您需要使用utf8或类似代码对字符串进行编码。如果cp1252不起作用,请尝试。我已经更新了我的答案。我尝试使用此代码将.xlsm文件转换为csv,但什么都没有发生-没有错误,也没有写出我能看到的任何内容。。可能发生的事情。我也不明白在上面的代码中csv被写到哪里。请记住,从当前的xlrd版本(2.0+)开始,明确地说,只有“xls”才允许作为文件格式。因此,要打开“xlsm”文件,您必须切换到更好的openpyxl模块。
    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 #
    
    import pandas as pd
    
    # YOU MUST PUT sheet_name=None 
    df = pd.read_excel('YourFile.xlsm', sheet_name=None)
    
    # prints all sheets
    print(df)
    
    import pandas as pd
    
    import xlrd
    
    import openpyxl #required for xlrd 2.0.1 and higher
    
    df = pd.read_excel('your_excel_file_name.xlsm', sheet_name='your_sheet_name')
    df.to_csv('your_new_name.csv')