簡體   English   中英

Pivot 表帶 python win32com

[英]Pivot Table with python win32com

我嘗試使用 Python 制作 excel 文件。 為此,我使用 win32com,因為這似乎是制作 pivot 表的最佳方法(熊貓不是一個好的解決方案),但我遇到了一些麻煩。

首先,當我嘗試在已經存在 pivot 表的工作表上創建 pivot 表時,我收到該錯誤消息:

Traceback (most recent call last):

  File "<ipython-input-55-62ca0c0e21ec>", line 1, in <module>
    PivotTable = PivotCache.CreatePivotTable(TableDestination=PivotTargetRange, TableName=PivotTableName, DefaultVersion=win32c.xlPivotTableVersion14)

  File "C:\Users\LPLOUV~1\AppData\Local\Temp\gen_py\3.7\00020813-0000-0000-C000-000000000046x0x1x9\PivotCache.py", line 45, in CreatePivotTable
    , TableName, ReadData, DefaultVersion)

com_error: (-2147352567, 'Une exception s’est produite.', (0, None, None, None, 0, -2146827284), None)

其次,我需要重新制作一些已經存在的 pivot 表,所以我需要從工作表中刪除一些數據透視表,但我不知道該怎么做。

直到我使用這段代碼:

import os
import win32com.client
import time



time_first = time.time()

os.chdir(r'C:\Users\msmith\Desktop')




Excel   = win32com.client.gencache.EnsureDispatch('Excel.Application') # Excel = win32com.client.Dispatch('Excel.Application')

win32c = win32com.client.constants

wb = Excel.Workbooks.Open('excel_file.xlsx')

Sheet1 = wb.Worksheets("Sheet1")
Sheet2 = wb.Worksheets("Sheet2")

xldata = Sheet1.UsedRange.Value
data_pivot = xldata[:24291]


cl1 = Sheet1.Cells(1,1)
cl2 = Sheet1.Cells(1+len(data_pivot)-1,1+len(data_pivot[0])-1)
PivotSourceRange = Sheet1.Range(cl1,cl2)

cl3=Sheet2.Cells(200,200)
PivotTargetRange=  Sheet2.Range(cl3,cl3)
PivotTableName = 'ReportPivotTable'


PivotCache = wb.PivotCaches().Create(SourceType=win32c.xlDatabase, SourceData=PivotSourceRange, Version=win32c.xlPivotTableVersion14)

PivotTable = PivotCache.CreatePivotTable(TableDestination=PivotTargetRange, TableName=PivotTableName, DefaultVersion=win32c.xlPivotTableVersion14)


PivotTable.PivotFields('A').Orientation = win32c.xlRowField
PivotTable.PivotFields('A').Position = 1
PivotTable.PivotFields('B').Orientation = win32c.xlPageField
PivotTable.PivotFields('B').Position = 1
PivotTable.PivotFields('B').CurrentPage = 'b'
PivotTable.PivotFields('C').Orientation = win32c.xlPageField
PivotTable.PivotFields('C').Position = 2
PivotTable.PivotFields('C').CurrentPage = 5

PivotTable.PivotFields('D').Orientation = win32c.xlPageField
PivotTable.PivotFields('D').Position = 1
PivotTable.PivotFields('D').CurrentPage = 'd'




PivotTable.PivotFields('E').Orientation = win32c.xlPageField
PivotTable.PivotFields('E').Position = 3
PivotTable.PivotFields('E').CurrentPage = "(All)"
PivotTable.PivotFields('D').Orientation = win32c.xlColumnField
PivotTable.PivotFields('D').Position = 1



DataField = PivotTable.AddDataField(PivotTable.PivotFields('F'), Function = win32c.xlSum)
DataField = PivotTable.AddDataField(PivotTable.PivotFields('G'), Function = win32c.xlSum)

wb.SaveAs('excel_file.xlsx')
Excel.Application.Quit()

我認為您的數據中有一個空白字段。 例如:

這會給你錯誤。

在此處輸入圖像描述

這不會。

在此處輸入圖像描述

暫無
暫無

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

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