我正在使用python来parsingExcel文件,并在重新开始时使用excel = Dispatch('Excel.Application')访问应用程序的COM代码将find应用程序对象就好了,我将能够访问活动工作簿。 问题来了,当我有两个Excel的实例打开,我closures了第一个。 从那时起,每次调用excel = Dispatch('Excel.Application')提供一个与Excel打开的实例不同的应用程序对象。 如果我尝试excel.Visible=1它会打开一个新的Excel实例,而不是显示已经打开的excel实例。 如何获得已经打开的Excel实例的COM对象,而不是创build新的实例?
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 = […]
我大约一年前写了一个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 […]
我有一个2007年的xlsm文件里面有一个macros,当被调用时,创build一个解算器configuration(目标,约束,…),并执行解决scheme,没有任何用户交互。 从Excel手动运行时,这工作正常。 我现在想从Python通过COM脚本。 但是,当Python代码调用求解器macros时: app.Run("runSolver()") 它失败: foobar.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 […]
是否有可能从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) 然后它失败了。 我甚至不知道我是否走向正确的方向。
我正在用win32com加载一个.xlsx文件,并希望在完成时将结果保存为csv文件。 myworkbook.SaveAs('results.csv') 给我一个csv扩展名的xlsx文件。 如何将其保存为实际的CSV?
我正在做一个分析数据文件的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 […]
我在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
每个源文件只包含一个工作表。 我想要的只是将这些表单合并成一个文件。 我想我将不得不使用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')
试图通过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 = […]