Tag: com

Interop.Excel和Tools.Excel之间的区别?

我目前正在为Microsoft Excel的AddIn工作,我对某事有点困惑: Interop.Excel和Tools.Excel什么Tools.Excel ? 例如,在Interop.Excel.Workbook和Tools.Excel.Workbook之间? 还是Interop.Excel.Worksheet和Tools.Excel.Worksheet ? 他们用什么,我在哪里使用哪一个? 是否有可能从一个到另一个? 谢谢!!

通过VBA将Excel表格复制到PowerPoint并保存

我正在尝试大量生成一系列PowerPoint演示文稿。 我的幻灯片将包含两个元素,都创build和从Excel复制。 我正在使用Office 2010。 第一个元素是一个顺利完成的SmartArtgraphics。 第二个是我想复制为Table对象 (而不是链接的图像)的几个单元格。 在“形状”浪费了几个小时之后,我发现了这一点,但粘贴之后我无法操纵它的高度和宽度 。 PPApp.CommandBars.ExecuteMso ("PasteSourceFormatting") 然后,当我尝试使用以下内容保存演示文稿时,我意识到只有SmartArt被保存; 即使在粘贴之后发生saveAs命令,粘贴的表格也不会被保存。 PPApp.CommandBars.ExecuteMso ("PasteSourceFormatting") PPPres.SaveAs saveName, ppSaveAsDefault PPPres.Close 更奇怪的是,我发现当我添加一个msgbox命令进行debugging时,在上面的粘贴和保存之间,表格被正确保存。 但是,我试图批量生产这些文件,不能坐下来closures每个消息框。 我的问题:1.粘贴后如何更改桌子的高度/宽度/alignment方式? 2.如何将表格保存在我的文件中? 编辑,我现在的代码 Sub copyAllToPpt() Dim PPApp As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim PPSlide As PowerPoint.Slide Dim PPName, xlName As String xlName = ActiveWorkbook.Name Dim saveName As String Workbooks(xlName).Activate Dim y As Integer […]

以编程方式设置Excel图表标题

如何用C#和Interop设置图表标题? 其实尝试: Excel.Range chartRange; Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlsSheet.ChartObjects(Type.Missing); Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 80, 300, 250); Excel.Chart chartPage = myChart.Chart; chartRange = xlsSheet.Range[xlsSheet.Cells[1, 1], xlsSheet.Cells[ar.GetLength(0), ar.GetLength(1)]]; chartPage.SetSourceData(chartRange, Excel.XlRowCol.xlRows); chartPage.ChartType = Excel.XlChartType.xl3DColumn; chartPage.Location(Excel.XlChartLocation.xlLocationAsNewSheet, oOpt); chartPage.HasTitle = true; chartPage.ChartTitle.Text = "HeaderText"; 甜美 “System.Runtime.InteropServices.COMException” 错误HRESULT E_FAIL已经从对COM组件的调用中返回

从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 […]

使用Python和comtypes使用数组设置Excel范围?

使用comtypes来驱动Python,似乎有一些魔法发生在幕后,而不是将元组和列表转换为VARIANTtypes: # RANGE(“C14:D21”) has values # Setting the Value on the Range with a Variant should work, but # list or tuple is not getting converted properly it seems >>>from comtypes.client import CreateObject >>>xl = CreateObject("Excel.application") >>>xl.Workbooks.Open(r'C:\temp\my_file.xlsx') >>>xl.Visible = True >>>vals=tuple([(x,y) for x,y in zip('abcdefgh',xrange(8))]) # creates: #(('a', 0), ('b', 1), ('c', 2), ('d', 3), […]

图片输出excel图(通过自动化)

我正在试图获得一个Excelgraphics的句柄,并通过MATLAB保存。 到目前为止,我已经设法循环表单,并获得graphics对象的句柄,但我不能保存它。 有谁知道如何导出对象为jpg或png或其他graphics格式? 我使用SaveAs方法尝试下面的代码,但它不起作用 Workbook = Workbooks.Open(['file.name]); Sheets = Workbook.Sheets; for i = 1:Sheets.Count Activesheet = get(Sheets, 'Item',i); for j = 1:Activesheet.ChartObjects.Count obj = Activesheet.ChartObjects(j); obj.SaveAs('asfasfa.jpg') end end

C#Excel VBA使模块名称不依赖于语言

excelFile.VBProject.VBComponents.Add(vbext_ComponentType.vbext_ct_StdModule); Office英文版中的代码将创build一个名为“Module1”的模块。 但是,如果办公语言不同,“Module1”将以另一种语言。 我需要知道如何在我的代码中调用这个模块。 var standardModule = excelFile.VBProject.VBComponents.Item("ThisWorkbook"); 同样的问题在这里英文版的Office“ThisWorkbook”退出,但在另一种语言中,它将被称为不同的。 有可能使这种代码语言独立?

使用COM Interop将对象从C#传递到VBA

是否有可能使用COM将自定义对象(如MyClass [])从C#传递给VBA? 如果没有,这是最好的解决scheme,让这个工作?

从单线程进行COM调用挂起线程

我有一个应用程序,通过自动化添加进行一些Excel自动化。这个加载项是multithreading的,所有的线程pipe理调用到Excel的COM对象。 因为在进行多个调用时,excel有时可能会返回“忙”exception,所以我已将所有调用都包含在“重试”函数中。 不过,我觉得这是无益的。 我现在正试图在同一个线程上调用excel对象,这样所有的调用都被我“序列化”,从而降低了excel返回“忙”exception的风险。 但是,当此线程尝试访问Excel对象时,应用程序将挂起。 我已经尝试将线程设置为STA或MTA无济于事。 我用来从单个线程启动所有代码的代码如下:“违规”部分应该在“DoPass”中,也许我调用Delegate的方式有些不对。 public static class ExcelConnector { public static Thread _thread; private static int ticket; public static Dictionary<Delegate, int> actionsToRun = new Dictionary<Delegate, int>(); public static Dictionary<int, object> results = new Dictionary<int, object>(); static ExcelConnector() { LaunchProcess(); } public static int AddMethodToRun(Delegate method) { lock (actionsToRun) { ticket++; actionsToRun.Add(method, ticket); […]

如何在Excel中读取单元格的格式化文本表示

我使用的COM接口到Excel中,我想获得一个单元格格式的文本表示,而不是真正的基础值。 例如,假设单元格包含数字1.23456 ,并且用户已经指定了带有一个小数位的数字格式。 然后我想能够读取string"1.2" 。 我知道我可以使用Range.Text但是这在一些重要的方面失败了。 Range.Text返回用户在工作表视图中看到的内容,如果单元格被隐藏,则返回空string。 如果单元格的宽度很低,则返回截断的string。 Range.Text也下降,因为它被限制为1024个字符。 另一个用例是单元格计算出错误,例如#DIV/0! , #NAME? , #REF! 等等。我知道我可以读取Range.Value并testingvariables是否typesvarError (我使用Delphi,在VBA中它将是vbError )。 我想不出的是如何获得文本表示#DIV/0! 等Range.Text返回这个,但不是如果单元格被隐藏或太窄。 编辑 我认为Range.Text的限制实际上是255个字符。