Tag: excel interop

用C#打开Sharepoint 2007文档库中的excel文件

我试图从一个SharePoint文档库打开一个Excel文件。 我的应用程序search特定的文件,获取其链接,并使用它下载并进一步打开。 我的应用程序在我的机器和testing服务器上运行,但是当我将它发送到质量保证服务器时,问题就开始了。 我没有权限访问QA机器。 我只有一堆Console.writes来看看会发生什么。 从我可以告诉,所有的作品都很好,直到它试图打开Excel给出以下错误: Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD)) 从我的search这是一些与操作系统语言相关的错误,或者有两种操作系统语言之间的区别http://support.microsoft.com/kb/320369 。 问题是,所有机器的所有操作系统语言属性是相同的,如果这是问题,我将无法打开我的机器或testing服务器的Excel。 另外,在解决方法中,他们使用InvokeMember? 真的不明白为什么我会做这样的事情。 代码:(我正在使用Microsoft.Office.Interop.Excel;) MSExcel.Application MyExcel = new MSExcel.ApplicationClass(); MSExcel.Workbook wb = MyExcel.Workbooks.Open(link, 0, true, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, true, false);//Add(pathExcel); MSExcel.Worksheet MyWS = (MSExcel.Worksheet)wb.Worksheets.get_Item(1); 链接是文件的完整url。 我将不胜感激这个问题。 如果任何人有另一种方式做同样我也很感激。 提前致谢。

使用COM Interop在Excel中打开字节数组

那么,在我的项目中,我需要使用Excel文件从它读取数据(是的,propper数据库会更好,但我不能使用一个)。 随着Microsoft.Office.Interop.Excel我打开这样的文件: Application.Workbooks.Open(FileName); 但是我不想和项目DLL一起发送这个文件,因为用户并不想改变这个文件。 所以,我把它作为一个资源添加,并成为一个字节数组,没有path到磁盘。 byte[] ExcelFile = Properties.Resources.MyExcelFileResource; 现在,我怎么加载这个字节数组文件与Excel Interop? 我想打开它作为一个真正的Excel文件,在内部使用它。

使用常量查找所有单元格崩溃Excel

我正在尝试使用Excel Interop程序集来查找具有常量的所有单元格的计数。 在小文件这工作正常。 但是在更大的文件excel崩溃。 我用206963行和9列的文件试了一下,excel崩溃了。 任何人都知道解决方法? 是否有一个SpecialCells函数的限制列表,什么时候不应该使用? 以下是我的代码: public static int getConstantCount(Range myRange) //myRange = myWorksheet.UsedRange { try { return myRange.SpecialCells(XlCellType.xlCellTypeConstants).Count; } catch (System.Runtime.InteropServices.COMException ex) { return 0; } } 我注意到这也发生在Excel本身没有使用任何互操作程序集。 看看https://superuser.com/questions/632856/excel-go-to-special-crashes-on-large-file

在将我的网站部署到IIS后,Excel不会退出

我在我的网站项目中使用C#中的Excel互操作来parsingExcel文件并将其转换为文本文件。 示例代码如下。 它在debugging模式下运行良好。 但在任务pipe理器中,我经常看到两个Excel正在运行,为什么? 另外,将网站部署到IIS后,excel.exe将不会退出。 我的项目是VS 2010(Ultimate)中的一个网站项目。 我的机器是Windows Server 2008,这意味着我应该有IIS 7.但是当我运行inetmgr时,它显示IIS版本6(谷歌search后,我确认我的IIS应该仍然是7,pipe理工具是6)。 所以我的问题是为什么Excel部署到IIS后不退出? Excel.Application excel=new Excel.Application(); Excel.Workbooks wbs=excel.Workbooks; Excel.Workbook wb=wbs.Open(…); Try { … Foreach(Excel.Worksheet sheet in wb.Sheets) { … Marshal.RealseComObject(sheet); } … } Catch() { } Finally { wb.Close(false, missing, missing); while (Marshal.ReleaseComObject(wb)!=0) { } wb=null; while (Marshal.ReleaseComObject(wbs)!=0) { } wbs=null; excel.Quit(); while (Marshal.ReleaseComObject(excel)!=0) { } […]

C#Excel高级自动筛选排除值列表

我想申请自动筛选器使用C#在Excel中的列,但只想显示不等于指定列表的值。 原始列表如下所示: 我想过滤符合以下标准"<>apple"和"<>orange"应该导致一个列表,看起来像这样: 但是,使用下面的代码只显示了我之后的反向: private void ActivateAutoFilter() { this.Range["A1", "C1"].Value2 = GetArrayFromList(new List<string>() { "H1", "H2", "H3" }); this.Range["A2", "C2"].Value2 = GetArrayFromList(new List<string>() { "apple", "apple", "apple" }); this.Range["A3", "C3"].Value2 = GetArrayFromList(new List<string>() { "orange", "orange", "orange" }); this.Range["A4", "C4"].Value2 = GetArrayFromList(new List<string>() { "pear", "pear", "pear" }); Microsoft.Office.Tools.Excel.NamedRange my_named_range = this.Controls.AddNamedRange(this.Range["A1", "C1"], "MY_NAMED_RANGE"); string[] […]

使用C#编程使用小计函数在Excel中对数据进行sorting

我有数据,我想应用小计function,然后按降序sorting结果数据。 到目前为止,我已经设法让我的代码应用小计function,然后更改视图,所以它只显示我想要sorting的列。 我不知道如何使用.Sort方法在这一点上只对可见的数据进行sorting。 我的代码来实现小计: xcel.Range range = excelWorksheet.UsedRange; range.Subtotal(1, Excel.XlConsolidationFunction.xlSum, Type.Missing, (object)true, (object)false, Excel.XlSummaryRow.xlSummaryBelow); 我的代码将视图更改为我想要sorting的列: excelWorksheet.Outline.ShowLevels(2, Type.Missing); 在这一点上,我已经尝试了使用几乎所有我能想到的范围的.Sort方法的许多变体(可见范围,明确说明我想要的列,整个工作表,小计filter之前使用的范围,使用的范围在小计过滤之后)。 我也尝试过在Excel中录制一个macros,但我不知道如何将其转换回C#。 Excelmacros的确切,我需要的是: Range("G3").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("G3"), _ SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A2:G2853") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 有没有人知道如何在小计分组应用后对数据进行sorting?

在Excel范围中指定列

我需要指定在创build图表的范围中使用的列。 行数会有所不同,所以他们不固定。 这是我的代码, int rowCountDRS = 172; //variable size changes Excel.Range iChartRange; iChartRange = iopsDBSheet.get_range("A2:A" + rowCountDRS, "D2:D" + rowCountDRS); 这生成的范围,但使用A2到D rowCountDRS值,这不是我在找什么,而是我想从列A2到rowCountDRS值和D2直到rowCountDRS值用于创build我的图表,但我不是确定如何指定由于不同的rowCountDRSvariables,最简单的,如果我能做些什么 iChartRange = iopsDBSheet.get_range("A2:A172", "D2:D172");

Microsoft Excel无法访问ASP.net项目中的文件

我创build的Web应用程序,每行读取Excel文件,当我从我的本地运行它完美的工作。 但是当我部署到Web服务器[赢得7 64位],它会产生这样的错误: Microsoft Excel cannot access the file 'C:\TestReadExcel\testdata.xlsx'. There are several possible reasons: • The file name or path does not exist. • The file is being used by another program. • The workbook you are trying to save has the same name as a currently open workbook. 这个错误来自这个代码(我使用Microsoft.Office.Interop.Excel): Line 195: Dim workbook […]

.NET如何打开CSV与Excel Interop没有文本转换为公式

我目前遇到以下问题: 我需要用Excel Interop Classes(15.0)打开一个CSV文件。 这是使用以下代码完成的: Dim app As New Excel.Application Dim workbook As Excel.Workbook = app.Workbooks.Open(sFileNameCSV, Format:=4, Local:=True) 不幸的是,这将一些数据转换成公式(例如,以连字符开头的文本[这是一个示例]或国际格式的电话号码[+ 41-555-123-45-67]),导致#NAME? 错误或电话号码的计算结果。 经过一些searchnetworking和所以我尝试了以下的事情没有运气: 将CSV文件另存为.txt文件 使用OpenText()方法而不是Open()方法 以上两者的结合 有没有解决这个问题,而不必改变CSV文件数据本身,仍然使用互操作类,如完全禁用公式? 或者我只是在Open()/ OpenText()函数中缺less一个参数?

在使用NetOffice互操作时,无法将Excel对象作为参数从VBA传递到.NET

当Microsoft的互操作程序集被引用时,像Worksheet,Workbook,Range等Excel对象可以从VBA传递给.net作为参数: .NET类: using Excel = Microsoft.Office.Interop.Excel; [ComVisible(true)] [ClassInterface(ClassInterfaceType.AutoDual)] public class MyExcelLib { public MyExcelLib() {} // default constructor public void InsertTable(Excel.Workbook wbook, string TableName, …) { … } } 在Visual Studio或Regasm实用程序中,可以使用Register for COM Interop选项(请参阅Newman的文章以获得更好的概述)。 VBA脚本(excelmacros)调用.net方法InsertTable() : Dim xLib As New MyExcelLib Call xLib.InsertTable(ThisWorkbook, "Price", ..) 这工作; Workbook对象可以作为参数从VBA传递给.NET。 但是相同的模式不适用于NetOffice程序集: using Excel = NetOffice.ExcelApi; using NetOffice.ExcelApi.GlobalHelperModules; using […]