Tag: interop

如何使用Interop从C#中的Excel或PowerPoint文件中获取修订?

我正在处理一个需要从文档和修订中统计单词的应用程序。 正如你在这里看到的,我已经为Word文档解决了这个问题(尽pipe可以解决这个问题),但是现在我发现自己想知道如何从Excel或PowerPoint文档中获取这些数据。 MSDN文档迄今没有帮助 – 我会继续寻找,但如果有人知道答案,我将不胜感激一点帮助。 编辑:所以采取由@Andrew提供的信息(感谢他去)我得到这个Excel部分的代码: foreach (Excel._Worksheet s in ExcelBook.Sheets) { if (s.UsedRange.Value2 != null) { for (int i = 1; i <= s.UsedRange.Value2.GetLength(0); i++) { for (int j = 1; j <= s.UsedRange.Value2.GetLength(1); j++) { string content = s.UsedRange.Value2[i, j]; MessageBox.Show(i + " – " + j + " – " + content); […]

Excel代码中的消息(C#)

当我的代码运行时,我有一个从Excel中popup的消息框重试,我只是想让我的代码能够模拟input密钥,如果它popup每次它。 这是出现并冻结我的代码的消息框。 我使用OLE消息closures了其中的一个,但是我还是得到了这个消息箱来模拟点击重试或input密钥的方法。 //Turn off OLE Error Message oXL.DisplayAlerts = false;

使用LINQ从System.Array转换为List <string>,需要保留空值

在我的项目中,我使用互操作连接(.NET 4.5之前的WPF应用程序)将2列转换为易于与List一起工作。 这里的问题在于我正在阅读的两列之一有很多空值。 大多数是空值; 并且select过程决定跳过它们而不是填充一个空值,所以现在剩下2个不等于X excel表单的2个不均匀的列(X在这里是1500左右,所以这个方法相当省时) ; Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(pathName, 0, true, 5,"", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); Excel.Range range = xlWorkSheet.UsedRange; range = xlWorkSheet.UsedRange.Columns[1]; System.Array myvals = (System.Array)range.Cells.Value; xmlData.AddRange(myvals.OfType<object>().Select(O => O.ToString()).ToList()); range = xlWorkSheet.UsedRange.Columns[2]; myvals = (System.Array)range.Cells.Value; xmlCode.AddRange(myvals.OfType<object>().Select(P => […]

查询expression式中的语法错误(缺less运算符)“”

我在删除(DELETE)行时遇到问题。 每次我在我的string sql添加列名称它显示错误“查询expression式中的语法错误(缺less运算符)”。 这是我的代码: OleDbConnection myCon = new OleDbConnection("provider = Microsoft.Jet.OLEDB.4.0;DataSource = '" + fileLocation + "'; Extended Properties=Excel 8.0;"); OleDbCommand myCmd = new OleDbCommand(); myCmd.Connection = myCon; string sql = "DELETE * FROM [" + tablename + "$] where _date = '" + full_date + "'"; myCmd.CommandText = sql; myCon.Open(); myCmd.ExecuteNonQuery(); myCon.Close(); 例如我的string sql值是 […]

C#使用Interop写入打开的Excel文件

我有一个可笑的困难时间,但我需要能够连接到一个打开的Excel文件使用互操作,然后写入该文件。 该文件是由外部进程打开,然后此应用程序稍后写入到工作簿。 我可以得到它打开一个文件并写入到活动工作簿。 但我找不到连接到以前的工作簿并写入的方法。 我一直在使用Marshal.GetActiveObject但是我很快就会在打开多个文件的计算机上运行应用程序,并且需要写入一个很可能不是活动文件的文件。

使用C#读取和写入Excel的最快方法

可能重复: 从C#导出大量数据到excel的最佳/最快捷的方式是什么? 我正在创build一个具有以下function的Web应用程序: 假设pipe理员将一些数据存储在预定义的Excel模板文件中。 他将访问pipe理页面并上传此Excel。 应用程序读取此Excel并相应地更新数据库中的数据。 存储在数据库中的数据必须显示给访问ViewDetails页面的任何用户。 现在,数据应该在屏幕上显示给用户,并且必须提供“下载到Excel”选项。 另外,用户可以select过滤数据和sorting数据。 假设行数将是10000+,并且每行中大约有10-15列的文本/数字数据。 我目前的想法是使用Interop.Excel对象来读取Excel模板并将数据上传到数据库中。 对于阅读,我通常将所有的数据提取到DataTable中,然后根据需要进行显示。 我打算使用DataView进行sorting和过滤。 然而,我从来没有处理过这样大的数据,我不确定使用上述方法的性能。 我的问题是,要实现我的要求,最好和最快的方法是什么? 我读了一个地方,大概需要2-3分钟才能把这么多的数据写入Excel文件。 我还遇到过OpenXML:“Open XML是文字处理文档,演示文稿和电子表格的开放标准,可以由不同平台上的多个应用程序自由实现。 我可以使用它来更好地实现要求还是有其他的方式? 我最近开始开发C#Web应用程序,并首次使用Excel电子表格,所以如果有任何我不知道的明显答案,请耐心等待。 提前致谢 :)

通过ASP.NET和IIS7在服务器上保存Excel工作簿

执行SAVEAS时,以下代码示例会产生相同的错误: Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); filePath = (string.Format("{0}.{1}", Path.GetTempFileName(), "xls")); …做一些东西的工作簿… excelApp.DisplayAlerts = false; excelApp.ActiveWorkbook.SaveAs(filePath) 要么 Missing m = Missing.Value; excelApp.ActiveWorkbook.SaveAs(filePath, m, m,m,m,m, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, m,m,m); 要么 excelApp.ActiveWorkbook.SaveAs(filePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value); 这里是错误:exception: System.Runtime.InteropServices.COMException(0x800A03EC):exception从HRESULT:0x800A03EC在Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(对象文件名,对象FileFormat,对象密码,对象WriteResPassword,对象ReadOnlyRecommended,在Common.CreateTempExcelFile(DataTable数据)对象CreateBackup,XlSaveAsAccessMode AccessMode,Object ConflictResolution,Object AddToMru,Object TextCodepage,Object TextVisualLayout,Object Local) 我曾在服务器上的Office 2003 interop,但已升级到2007年。没有区别。 顺便说一句,我可以写一个文本文件到相同的文件/path,所以它不是在文件夹上的权限错误。 提前致谢, 吉姆

从excel更新外部系统

我之前看到的演示显然是可能的,但没有抓到足够的细节 我打算做一个函数调用如 =MyRTDReverse("keyvalue", "fieldName", [AC51]) 要么 =MyRTDReverse("keyvalue", [AB51], [AC51]) // where AB51 has the field name and AC51 has the field value 等等 更新单元格AC51中的值会触发更改 任何样品/模式如何工作? 更新 – 使用.net 3.5 + VSTO UPDATE 2 – 宁愿不使用VSTO,而是像调用例程一样使用UDF / RTD

工作表。无保护 – Office Interop – 2003年和2007年之间的差异

我有一个.NET的WinForms应用程序自动化Excel和检查工作表密码。 要求能够检测到1)保护被closures2)密码被移除(被保护,但没有密码)3)密码与来自数据库的正确密码匹配 为了满足第二个要求,程序调用带有空string的Worksheet.Unprotect命令,捕获错误。 如果出现错误,则进行第三次检查。 如果没有错误,那么取消保护工作没有密码==>密码被删除。 下面的代码示例有这些检查。 该应用程序可以做到这一点与Office 2003的罚款。我有我的开发机更新到Office 2007,它不再像以前那样工作。 当我打电话给Worksheet.Unprotect,Excel提示input密码! 我需要知道如何在新版本的Excel中完成这项工作,或者如果有办法引用旧的PIA。 无论如何设置Excel 11的引用,在GAC中将其replace为12的PIA。 'return true if unprotect of worksheet does not generate an error 'all other errors will bubble up 'return false if specific error is "Password is invalid…" Try 'detect unprotected or no password If oWorksheet.ProtectContents Then 'try with no passsword and expect an […]

在ASPX webapp中使用服务器端剪贴板的问题

我有一个运行服务器端的报告应用程序,它从我的数据库中读取一个存储的BMP(作为一个字节[]),将其转换回一个图像,然后将其放入一个Excel电子表格中,这个电子表格构成了这个报告的基础(这个报告最终传递给客户端下载。)为此,我试图使用服务器端剪贴板来处理图像的“粘贴”到工作表中的特定范围。 这是代码片段 – System.Drawing.Image image; Bitmap bm; Graphics g; Excel.Range range; MemoryStream ms = new MemoryStream(graphRecs.ElementAt(0).Graph, 0, graphRecs.ElementAt(0).Graph.Length); ms.Write(graphRecs.ElementAt(0).Graph, 0, graphRecs.ElementAt(0).Graph.Length); image = System.Drawing.Image.FromStream(ms, true); bm = new Bitmap(413, 130); g = Graphics.FromImage(bm); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.DrawImage(image, 0, 1, 413, 130); Clipboard.SetDataObject(bm, false, 4, 250); range = ws.get_Range(cBlkPtr[6, 2], cBlkPtr[6, 2]); ws.Paste(range, bm); Clipboard.Clear(); 在VS2008下的debugging模式下运行它似乎工作正常 […]