Pandas数据框到具有定义名称范围的Excel

问题描述 投票:1回答:2

我想在我的代码运行时向Excel写入多个不同大小的df。

某些表将包含源数据,而其他表将包含对该源数据进行操作的Excel公式。

我想要公式df包含对源数据df的Excel引用,而不是跟踪我写入源数据的单元格范围。

这可以使用Excel的名称或Excel的表格功能完成。

例如在我的公式df中我可以有= INDEX(my_Defined_Name_source_data,4,3)* 2和Excel名称my_Defined_Name_source_data是我索引源数据所需的全部内容。

Openpyxl详细信息在这里写表https://openpyxl.readthedocs.io/en/stable/worksheet_tables.html?highlight=tables

表不支持multiindex df.to_excel将创建的合并单元格。

所以我正在寻找定义名称。几乎没有使用wb.defined_names.append()在openpyxl中编写定义名称的文档这是我发现的https://openpyxl.readthedocs.io/en/stable/api/openpyxl.workbook.defined_name.html?highlight=definednames

我正在寻求帮助:如何将DataFrame写入Excel并为其提供Excel定义的名称。文档和在线示例几乎不存在。

还要感谢接受替代想法的建议,因为我似乎正在访问几乎没有其他人使用的东西。

python excel pandas
2个回答
1
投票

“xlsxwriter”库允许您创建Excel数据表,因此我编写了以下函数来获取DataFrame,将其写入Excel,然后将数据转换为数据表。

def dataframe_to_excel_table(df, xl_file, xl_tablename, xl_sheet='Sheet1'):
    """
    Pass a dataframe, filename, name of table and Excel sheet name.
    Save an excel file of the df, formatted as a named Excel 'Data table'
    * Requires "xlsxwriter" library ($ pip install XlsxWriter)

    :param df: a Pandas dataframe object
    :param xl_file: File name of Excel file to create
    :param xl_sheet: String containing sheet/tab name
    :param xl_tablename: Data table name in the excel file
    :return: Nothing / New Excel file
    """

    # Excel doesn't like multi-indexed df's. Convert to 1 value per column/row
    #   See https://stackoverflow.com/questions/14507794
    df.reset_index(inplace=True)  # Expand multiindex

    # Write dataframe to Excel
    writer = pd.ExcelWriter(path=xl_file,
                            engine='xlsxwriter',
                            datetime_format='yyyy mm dd hh:mm:ss')
    df.to_excel(writer, index=False, sheet_name=xl_sheet)

    # Get dimensions of data to size table
    num_rows, num_cols = df.shape

    # make list of dictionaries of form [{'header' : col_name},...]
    # to pass so table doesn't overwrite column header names
    # https://xlsxwriter.readthedocs.io/example_tables.html#ex-tables
    dataframes_cols = df.columns.tolist()
    col_list = [{'header': col} for col in dataframes_cols]

    # Convert data in Excel file to an Excel data table
    worksheet = writer.sheets[xl_sheet]
    worksheet.add_table(0,0,    # begin in Cell 'A1'
                        num_rows, num_cols-1,
                        {'name': xl_tablename,
                         'columns': col_list})
    writer.save()

0
投票

我通过简单地从OpenPyXL切换到XLSXWriter来解决这个问题

https://xlsxwriter.readthedocs.io/example_defined_name.html?highlight=names

© www.soinside.com 2019 - 2024. All rights reserved.