- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我改编了以下代码发现here在我现有的 Excel 工作表中创建数据透视表:
import win32com.client as win32
win32c = win32.constants
import sys
import itertools
tablecount = itertools.count(1)
def addpivot(wb,sourcedata,title,filters=(),columns=(),
rows=(),sumvalue=(),sortfield=""):
newsheet = wb.Sheets.Add()
newsheet.Cells(1,1).Value = title
newsheet.Cells(1,1).Font.Size = 16
tname = "PivotTable%d"%tablecount.next()
pc = wb.PivotCaches().Add(SourceType=win32c.xlDatabase,
SourceData=sourcedata)
pt = pc.CreatePivotTable(TableDestination="%s!R4C1"%newsheet.Name,
TableName=tname,
DefaultVersion=win32c.xlPivotTableVersion10)
for fieldlist,fieldc in ((filters,win32c.xlPageField),
(columns,win32c.xlColumnField),
(rows,win32c.xlRowField)):
for i,val in enumerate(fieldlist):
wb.ActiveSheet.PivotTables(tname).PivotFields(val).Orientation = fieldc
wb.ActiveSheet.PivotTables(tname).PivotFields(val).Position = i+1
wb.ActiveSheet.PivotTables(tname).AddDataField(wb.ActiveSheet.PivotTables(tname).
PivotFields(sumvalue),sumvalue,win32c.xlSum)
def runexcel():
excel = win32.gencache.EnsureDispatch('Excel.Application')
#excel.Visible = True
try:
wb = excel.Workbooks.Open('18.03.14.xls')
except:
print "Failed to open spreadsheet 18.03.14.xls"
sys.exit(1)
ws = wb.Sheets('defaulters')
xldata = ws.UsedRange.Value
newdata = []
for row in xldata:
if len(row) == 4 and row[-1] is not None:
newdata.append(list(row))
rowcnt = len(newdata)
colcnt = len(newdata[0])
wsnew = wb.Sheets.Add()
wsnew.Range(wsnew.Cells(1,1),wsnew.Cells(rowcnt,colcnt)).Value = newdata
wsnew.Columns.AutoFit()
src = "%s!R1C1:R%dC%d"%(wsnew.Name,rowcnt,colcnt)
addpivot(wb,src,
title="Employees by leads",
filters=("Leads",),
columns=(),
rows=("Name",),
sumvalue="Actual hours",
sortfield=())
if int(float(excel.Version)) >= 12:
wb.SaveAs('new18.03.14.xlsx',win32c.xlOpenXMLWorkbook)
else:
wb.SaveAs('new18.03.14.xls')
excel.Application.Quit()
if __name__ == "__main__":
runexcel()
这行代码, wb.ActiveSheet.PivotTables(tname).AddDataField(wb.ActiveSheet.PivotTables(tname).PivotFields(sumvalue),sumvalue,win32c.xlSum)
返回以下错误:
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Excel', u'数据透视表类的 PivotFields 方法失败', u'xlmain11.chm', 0, -2146827284 ), 无)
.
当我删除该行时,生成的数据透视表没有任何数据字段。我做错了什么吗?
最佳答案
由于这是从 Python 搜索 Excel 数据透视表时 Google 的首批搜索结果之一,因此我发布了我的示例代码。此代码通过 COM 服务器在 Excel 中生成一个简单的数据透视表,其中应用了一些基本过滤器、列、行和一些数字格式。我希望这可以帮助某人不要在上面浪费半天时间(就像我一样......)
import win32com.client
Excel = win32com.client.gencache.EnsureDispatch('Excel.Application') # Excel = win32com.client.Dispatch('Excel.Application')
win32c = win32com.client.constants
wb = Excel.Workbooks.Add()
Sheet1 = wb.Worksheets("Sheet1")
TestData = [['Country','Name','Gender','Sign','Amount'],
['CH','Max' ,'M','Plus',123.4567],
['CH','Max' ,'M','Minus',-23.4567],
['CH','Max' ,'M','Plus',12.2314],
['CH','Max' ,'M','Minus',-2.2314],
['CH','Sam' ,'M','Plus',453.7685],
['CH','Sam' ,'M','Minus',-53.7685],
['CH','Sara','F','Plus',777.666],
['CH','Sara','F','Minus',-77.666],
['DE','Hans','M','Plus',345.088],
['DE','Hans','M','Minus',-45.088],
['DE','Paul','M','Plus',222.455],
['DE','Paul','M','Minus',-22.455]]
for i, TestDataRow in enumerate(TestData):
for j, TestDataItem in enumerate(TestDataRow):
Sheet1.Cells(i+2,j+4).Value = TestDataItem
cl1 = Sheet1.Cells(2,4)
cl2 = Sheet1.Cells(2+len(TestData)-1,4+len(TestData[0])-1)
PivotSourceRange = Sheet1.Range(cl1,cl2)
PivotSourceRange.Select()
Sheet2 = wb.Worksheets(2)
cl3=Sheet2.Cells(4,1)
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('Name').Orientation = win32c.xlRowField
PivotTable.PivotFields('Name').Position = 1
PivotTable.PivotFields('Gender').Orientation = win32c.xlPageField
PivotTable.PivotFields('Gender').Position = 1
PivotTable.PivotFields('Gender').CurrentPage = 'M'
PivotTable.PivotFields('Country').Orientation = win32c.xlColumnField
PivotTable.PivotFields('Country').Position = 1
PivotTable.PivotFields('Country').Subtotals = [False, False, False, False, False, False, False, False, False, False, False, False]
PivotTable.PivotFields('Sign').Orientation = win32c.xlColumnField
PivotTable.PivotFields('Sign').Position = 2
DataField = PivotTable.AddDataField(PivotTable.PivotFields('Amount'))
DataField.NumberFormat = '#\'##0.00'
Excel.Visible = 1
wb.SaveAs('ranges_and_offsets.xlsx')
Excel.Application.Quit()
关于python - 使用 python 在 Excel 中创建数据透视表会导致 pywintypes.com_error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22532019/
我正在使用 python 3.5 (32bit)、win10-64bit、OpenOPC,并且我已经下载了 pywin32 build 64bit。我已经运行了以下 python 代码: import
我的医疗办公室有一个网络驱动器(运行 DLink-325 NAS,如果这有什么不同的话),它保存了我们患者的所有文件。每个患者都有一个带有他们名字的文件夹,每个文件夹都包含这些文件。问题是 Windo
如何在 Python 3.3.5 中使用 pywintypes.Unicode? import pywintypes pywintypes.Unicode("s") 这会产生一个错误: Traceba
我正在尝试将简单的 Python 脚本转换为 Windows 可执行文件。我的 setup.py 脚本是: from distutils.core import setup import py2exe
我的以下代码片段运行良好。它创建一个图表并将其类型设置为 xlLine chart = ws.Shapes.AddChart().Select() xl.ActiveChart.ChartType =
我正在使用 pyHook、pythoncom 和 Pywin32 模块用 Python 制作一个小型键盘记录器。这是我的代码: import pyHook, pythoncom, sys, loggi
我想做的就是打开一个 .xlsm 文件,运行宏,保存工作簿,然后退出。理想情况下,我可以将宏作为变量传递,因为不同的情况会运行位于同一工作簿中的不同宏。这是到目前为止的代码。 import os, s
我想使用 pyinstaller 从 py 脚本创建 exe。我在cmd“pyinstaller --onefile --windowed filename.py”中编写了以下命令,但cmd显示错误。
我有以下脚本,是从这里模仿的(http://pythonexcels.com/python-excel-mini-cookbook/): import win32com.client as win32
我有一些代码可以打开一个 excel 文件并将其保存为 pandas 数据框,它最初用于 Python 2.7,目前我正试图让它在 Python 3 下工作。 最初,我使用了另一篇文章中@myidea
我在这里使用用户 Augustin 发布的解决方案:very quickly getting total size of folder folderPath = r"C:\Users\e46ldc\D
我正在尝试使用 pyrtd Python获取信息的模块,可以通过RTD在Excel中获取信息。 但是,当我尝试运行 sample python script ,我收到以下错误: pywintypes.
这是触发错误的代码行: win32gui.GetPixel(win32gui.GetDC(self._hwndGame), x, y) 错误如下: pywintypes.error: (0, 'Get
有没有人可以提供在 excel 中创建数据透视图的示例代码?我有一个使用数据透视表创建数据透视表的示例,它有效,而当我尝试以相同的方式创建数据透视图时,它总是失败! import win32com.c
打开剪贴板时出现错误,显示“pywintypes.error: (5, 'OpenClipboard', 'Access is denied')'。我在 SO 中看到了一些答案,但它们不能满足我的要求
我在运行模块 gasprop 时遇到此错误。我不明白错误的含义以及如何解决它: import gasprop Traceback (most recent call last): File "", l
我改编了以下代码发现here在我现有的 Excel 工作表中创建数据透视表: import win32com.client as win32 win32c = win32.constants impo
我正在尝试将我的 python 脚本打包成可执行文件。我认为我会非常直截了当,因为我没有太多进口商品。首先是我的进口商品: from __future__ import print_function
当我尝试按原样运行此代码时,出现此错误“IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_ID
我正在使用 python 在 word 中打开一个 word 文档并尝试使用 this 转换它在 StackOverflow 上回答。 我的 python 代码: import win32com.cl
我是一名优秀的程序员,十分优秀!