【问题标题】:Convert .xlsb to .xlsx - Multi-sheet Microsoft Excel File将 .xlsb 转换为 .xlsx - 多页 Microsoft Excel 文件
【发布时间】:2021-11-24 14:54:10
【问题描述】:

我有一个以 .xlsb 格式保存的多页 Excel 文件,我希望将其转换为 .xlsx 以利用 openpyxl 库 - 已编写代码以支持在启用宏之前曾经是 .xlsx 的同一工作簿,并且不会保存在 .xlsm 中。

我已设法从 .xlsb 转换为 .csv,但无法进一步转换,并且由于各种格式错误而遇到了各种库的障碍。

由于我的文件有多个工作表(所有表格),我只需复制并粘贴每个工作表上的文本(保留工作表名称)并将其转换为 .xlsx 格式。

为简单起见,假设我需要做的就是:获取工作表名称、访问工作表、确定最大行/列、循环:复制和粘贴单元格值、使用工作表名称写入 .xlsx。起始文件为 .xlsb。

任何建议将不胜感激。

【问题讨论】:

    标签: python


    【解决方案1】:

    刚刚测试过。

    Pandas 现在支持 xlsb 并且可以使用 Glen Thompson 在Read XLSB File in Pandas Python 中描述的方法打开这些文件:

    import pandas as pd
    df = pd.read_excel('path_to_file.xlsb', engine='pyxlsb')
    

    然后你可以使用:

    df.to_excel('path_to_file.xlsx')
    

    确保你 pip install pyxlsbopenpyxlxlrd,我总是忘记。

    【讨论】:

      【解决方案2】:

      办公室回答

      较新的版本的 Microsoft Office Excel、OpenOffice Calc 或 LibreOffice Calc 可以读取 xlsb

      因此,您只需在其中一个中打开文件并将其导出到xlsx

      Reference

      Python 答案

      CSV -> xlsx

      这可以通过 pandas,一个 python 包轻松完成。

      import pandas as pd
      df = pd.read_csv("/path/to/file.csv")
      df.to_excel("/path/to/result.xlsx")
      

      xlsb -> xlsx

      As mentioned in this answer、pandas 1.0.0 增加了对二进制 excel 文件的支持。

      import pandas as pd
      df = pd.read_excel("/path/to/file.xlsb", engine="pyxlsb")
      df.to_excel("/path/to/result.xlsx")
      

      要使用它,您必须升级pandas,并安装pyxlsb 和'openpyxl':

      pip install pandas --upgrade
      pip install pyxlsb
      

      (假设使用 python 3,因为 python 2 达到End of Life

      如果您需要对文件进行更多控制,可以直接使用pyxlsb

      【讨论】:

      【解决方案3】:

      我得到了复制代码来测试运行,但是返回错误,高于错误。 ValueError Traceback(最近一次调用最后一次) 在 () ----> 1 df = pd.read_excel(r'C:\Users\l84193928\Desktop\test.xlsb', engine='pyxlsb')

      D:\Users\l84193928\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\util_decorators.py 在 wrapper(*args, **kwargs) 176 其他: 第177章 --> 178 返回函数(*args, **kwargs) 179返回包装 180 返回_deprecate_kwarg

      D:\Users\l84193928\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\util_decorators.py 在 wrapper(*args, **kwargs) 176 其他: 第177章 --> 178 返回函数(*args, **kwargs) 179返回包装 180 返回_deprecate_kwarg

      D:\Users\l84193928\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\excel.py in read_excel(io,sheet_name,header,names,index_col,usecols,squeeze,dtype,引擎、转换器、true_values、false_values、skirows、nrows、na_values、parse_dates、date_parser、数千、评论、skipfooter、convert_float、**kwds) 305 306 如果不是实例(io,ExcelFile): --> 307 io = ExcelFile(io, engine=engine) 308 309 返回 io.parse(

      D:\Users\l84193928\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\excel.py in init(self, io, **kwds) 367 368 如果引擎不是无并且引擎!='xlrd': --> 369 raise ValueError("Unknown engine: {engine}".format(engine=engine)) 370 371 # 如果io是url,想把数据保存为字节不能通过

      ValueError:未知引擎:pyxlsb

      【讨论】:

      • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
      • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起更多的关注这个问题。
      【解决方案4】:

      我们可以使用 Pandas,但我们可能会丢失 .xlsb 中的一些信息(例如颜色、边框、图像等) 将 .xlsb 转换为 .xlsx 格式而不丢失信息的最佳方法是使用 aspose-cells Python中的模块,它在后端使用java。 我们可以使用 pip install aspose-cells

      安装这个模块
      # Use Aspose.Cells for Python via Java
      # Install java runtime 64 bit
      import jpype
      import asposecells
      jpype.startJVM()
      from asposecells.api import *
      
      # Open an excel file
      workbook = Workbook(r"xlsb_filepath.xlsb")
      workbook.save(r"xlsx_filepath.xlsx")
      

      参考来源:

      https://blog.aspose.com/2021/05/28/convert-excel-to-image-in-python/#:~:text=Python%20Excel%20to%20Image%20Converter%20API%20In%20order,can%20install%20the%20API%20using%20the%20following%20command.

      https://products.aspose.com/cells/cpp/conversion/xlsb-to-xlsx/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-19
        • 2013-05-19
        • 1970-01-01
        • 2016-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多