簡體   English   中英

使用 Azure 中的 Python 調整 Excel 文件工作表列的大小

[英]Resize Excel file sheet columns using Python in Azure

使用 Azure 中的 Blob 存儲時,我無法調整 Python 的 excel 表中的列大小。 讓我知道我做錯了什么。 以下是相關的代碼片段 -

    def resize_columns(df, data_val, sheet_name):
        wb =  openpyxl.load_workbook(data_val)
        
        worksheet = wb[sheet_name]
        cols = list(df.columns)
        count = 0

        for column in worksheet.columns:
            length = max(df[cols[count]].astype(str).str.len().max(), len(cols[count]))*1.25
            length = length if length <= 16 else 16
            worksheet.column_dimensions[column[0].column_letter].width = length
            count += 1

        return data_val
        

    connect_str = "..."

    blob_client = blob_service_client.get_blob_client(container=new_container_name, blob=file_name)

    data_val = io.BytesIO()

    writer = pd.ExcelWriter(data_val, engine="openpyxl")
    mpm_summary = pd.DataFrame({"one_val": [1, 2]})
    mpm_summary.to_excel(writer, sheet_name="A", index=False)

    mpm_summary = pd.DataFrame({"two_val00000000000000000000000000000000000000": [3, 4], "three_val": [5,6]})
    mpm_summary.to_excel(writer, sheet_name="B", index=False)

    writer.save()

    data_val = resize_columns(mpm_summary, data_val, "B")

    blob_client.upload_blob(data_val.getvalue(), overwrite=True)

非常感謝您的幫助。 謝謝

而不是再次加載工作簿

wb = openpyxl.load_workbook(data_val)

您可以只使用編寫器指針本身來訪問工作表,執行更改並在上傳 blob 之前保存它。


def resize_columns(writer,df, data_val, sheet_name):
    #wb =  openpyxl.load_workbook(data_val)
    worksheet = writer.book[sheet_name] #wb[sheet_name]
    cols = list(df.columns)
    count = 0

    for column in worksheet.columns:
        length = max(df[cols[count]].astype(str).str.len().max(), len(cols[count]))*1.25
        length = length if length <= 16 else 16
        worksheet.column_dimensions[column[0].column_letter].width = length+0.78
        count += 1
    return data_val

blob_client = blob_service_client.get_blob_client(container=container_name, blob=file_name)

data_val = io.BytesIO()

writer = pd.ExcelWriter(data_val, engine="openpyxl")
mpm_summary = pd.DataFrame({"one_val": [1, 2]})
mpm_summary.to_excel(writer, sheet_name="A", index=False)

mpm_summary = pd.DataFrame({"two_val00000000000000000000000000000000000000": [3, 4], "three_val": [5,6]})
mpm_summary.to_excel(writer, sheet_name="B", index=False)


data_val = resize_columns(writer,mpm_summary, data_val, "B")
writer.save()

blob_client.upload_blob(data_val.getvalue(), overwrite=True)

請注意 openpyxl 寬度與之間所需的細微差異/校正因子。 excel 列寬。 因此,您的乘法因子或偏移量可能需要微調。 https://foss.heptapod.net/openpyxl/openpyxl/-/issues/293

openpyxl - 調整列寬大小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM