Tag: win32com

win32com调度不会find已打开的应用程序实例

我正在使用python来parsingExcel文件,并在重新开始时使用excel = Dispatch('Excel.Application')访问应用程序的COM代码将find应用程序对象就好了,我将能够访问活动工作簿。 问题来了,当我有两个Excel的实例打开,我closures了第一个。 从那时起,每次调用excel = Dispatch('Excel.Application')提供一个与Excel打开的实例不同的应用程序对象。 如果我尝试excel.Visible=1它会打开一个新的Excel实例,而不是显示已经打开的excel实例。 如何获得已经打开的Excel实例的COM对象,而不是创build新的实例?

Python,Excel和图表使用win32com

Python和MS Excel的问题 – 使用win32com,我能够在Excel中创build图表,但我无法在工作表中移动它。 我在网上find代码来生成图表: import win32com.client from win32com.client import constants as c xl = win32com.client.gencache.EnsureDispatch('Excel.Application') xl.Visible = True wb = xl.Workbooks.Add() ws = xl.ActiveSheet ws.Range('A1').FormulaR1C1 = 'X' ws.Range('B1').FormulaR1C1 = 'Y' ws.Range('A2').FormulaR1C1 = 1 ws.Range('A3').FormulaR1C1 = 2 ws.Range('A4').FormulaR1C1 = 3 ws.Range('B2').FormulaR1C1 = 4 ws.Range('B3').FormulaR1C1 = 5 ws.Range('B4').FormulaR1C1 = 6 #ws.Range('A1:B4').Select() ch = ws.Shapes.AddChart().Select() xl.ActiveChart.ChartType = […]

win32com有问题使用python写date值

我大约一年前写了一个python脚本,从那以后一直工作得很好。 它使用ArcGIS arcpy模块中的search光标将我从oracle数据库中提取的一些值写入excel spreasheet,然后使用win32com写入excel spreasheet 。 最近,我经历了一个错误,我认为我已经确定了这个问题。 错误如下: sheet.Cells(excelrow,excelcol).Value = rowItem File "E:\sw_nt\Python27\ArcGIS10.1\lib\site-packages\win32com\client\__init__.py", line 474, in __setattr__ self._oleobj_.Invoke(*(args + (value,) + defArgs)) com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146827284), None) 所以,它挂在写一个特殊的价值,我从Oracle数据库拉当它试图写入excel的行: sheet.Cells(excelrow,excelcol).Value = rowItem 所以,我打印出rowItem的值和types,它返回: 值= 12/05/1193 键入= datetime.datetime 这个脚本已经写了大约一百行左右的date值,所以这个值似乎是非常特殊的。 我不认为excel喜欢当年的那一年。 1193. excel是否对datetime.datetime值有一定的限制? 我看不到它,但它是唯一真正想到的东西。 我知道这个值是错误的,因为我们对这个特定数据库的logging不能超过1890年左右。 要改变这个价值需要花费更多的时间和精力(我为政府工作,不拥有数据库,所以我没有权利改变它)。另外,我恐怕会遇到更多的这些错误,所以我宁愿处理他们,然后改变他们。 下面是我写的一个更完整的脚本来testing它: import arcpy, win32com.client # Set […]

从Python over COM调用Excelmacros/ Excel解算器

我有一个2007年的xlsm文件里面有一个macros,当被调用时,创build一个解算器configuration(目标,约束,…),并执行解决scheme,没有任何用户交互。 从Excel手动运行时,这工作正常。 我现在想从Python通过COM脚本。 但是,当Python代码调用求解器macros时: app.Run("runSolver()") 它失败: foob​​ar.xlsm未能解决,错误消息:模型中的错误。 请validation所有单元格和约束条件是否有效。 如果我在调用Run()在Python环境中设置了一个断点,然后从Excel手动运行这个macros,它可以正常工作,所以求解器的configuration不会出错。 错误消息列在解算器网站上,但我不认为它适用,因为表单解决手动罚款。 这个页面表明当通过com调用时,求解器环境还没有build立。 但是,添加 Application.Run "Solver.xla!Solver.Solver2.Auto_open" 正如我解算器macros的第一行结果是更一般的: File "c:\python26\lib\site-packages\win32com\gen_py\00020813-0000-0000-C000-000000000046x0x1x6.py", line 35061, in Run , Arg26, Arg27, Arg28, Arg29, Arg30 File "c:\python26\lib\site-packages\win32com\client\__init__.py", line 456, in _ApplyTypes_ self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args), com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146827284), None) 那么,正确的做法是什么? 编辑: 我把它分解成一个可复制的testing用例: Python代码: from […]

如何使用pythonCOM复制表格从Excel到Word

是否有可能从excel文件中获取表格并将其粘贴到保存其excel样式的word文档中? 我没有find关于win32com及其所有方法的足够的文档。 我find了一个方法PasteExcelTable ,我想我应该在调用这个方法之前从Excel中select表。 我做了以下几点: from win32com import client excel = client.Dispatch("Excel.Application") word = client.Dispatch("Word.Application") doc = word.Documents.Open("C:/word_file.docx") book = excel.Workbooks.Open("C:/excel_file.xlsx") sheet = book.Worksheets(1) sheet.Range("A1:D20").Select # Selected the table I need to copy doc.Content.PasteExcelTable(False, False, False) 然后它失败了。 我甚至不知道我是否走向正确的方向。

Python Win32,如何将XLS保存为CSV?

我正在用win32com加载一个.xlsx文件,并希望在完成时将结果保存为csv文件。 myworkbook.SaveAs('results.csv') 给我一个csv扩展名的xlsx文件。 如何将其保存为实际的CSV?

用win32com编写数组来优化python

我正在做一个分析数据文件的Python。 parsing的数据然后发送到Excel文件。 数据可能相当庞大。 我在看10到20列,但行数可以超过100.000。 写这么多的数据,胜过win32com需要相当长的时间。 我的第一步是迭代Excel文件中的单元格,这非常耗时。 经过一番挖掘,我发现我可以用一个通话写一行,从而大大减less了所需的时间。 但是,当我需要发送100.000行的数据时,仍然需要很长时间。 我很确定,通过一次性发送完整的arrays,我可以进一步提高速度。 不过,我目前无法做到这一点。 请参阅下面的代码,它演示了这个问题。 代码显示了时间的差异。 但是,第三步,将一个调用发送到一个范围的完整数组不会导致在Excel中正确的数据。 我究竟做错了什么? import win32com.client import time #create data array row = range(0,10) i = 0 data_array = [] while i < 1000: data_array.append(row) i += 1 #write the array to an excel file excel = win32com.client.Dispatch("Excel.Application") excel.Visible = True excel.ScreenUpdating = False book […]

pythonwin32 COMclosuresexcel工作簿

我在COM中打开了几个不同的工作簿(excel xlsx格式),并混淆了它们。 随着程序的进展,我希望closures一个特定的工作簿,但保持rest。 如何closures一个工作簿? (而不是整个Excel应用程序) xl = Dispatch("Excel.Application") xl.Visible = False try: output = xl.Workbooks.Open(workbookName) output2 = xl.Workbooks.Open(workbook2Name) except com_error: print "you screwed up blahblahblah" exit() #work on some stuff #close output but keep output2 open

如何将不同文件中的多个Excel工作表合并到一个文件中

每个源文件只包含一个工作表。 我想要的只是将这些表单合并成一个文件。 我想我将不得不使用win32com。 有谁知道如何? 更新:要组合的表格有广泛的条件格式,我想保留。 以下代码只能将它们与所有有条件格式化的信息混合在一起。 from openpyxl import load_workbook, Workbook import os fwb = Workbook() wb = load_workbook('CM1.xlsx') ws1 = wb.active wb = load_workbook('CM2.xlsx') ws2 = wb.active wb = load_workbook('CM3.xlsx') ws3 = wb.active fwb.add_sheet(ws1) fwb.add_sheet(ws2) fwb.add_sheet(ws3) fwb.save('CM.xlsx')

pythonwin32comclosuresExcel进程

试图通过python改变Excel_sheet,完全混淆进程恢复。 import win32com.client class XlsClass: def __init__(self ,filename=None ,*,Visible=False ,Alerts=False): self.xlApp = win32com.client.Dispatch('Excel.Application') self.xlApp.Visible = Visible self.xlApp.DisplayAlerts = Alerts if filename: self.filename = filename self.xlBook = self.xlApp.Workbooks.Open(filename) else: self.xlBook = self.xlApp.Workbooks.Add() self.filename = '' def __del__(self): self.xlBook.Close() self.xlApp.Quit() 有时代码运行良好,但是有时python会像“self.xlApp.Visible can not set?”一样产生错误。 这总是发生在一个循环中,就像: for fname in filelist: xlbook = XlsClass(fname) #do something 然后我检查了我的'windowstasksmanager'并注意到这一点 xlbook = […]