Tag: excel interop

将xlsx转换为xls问题

我试图将.xlsx文件转换为.xls ,它似乎工作正常,但是,当我打开.xls文件时,我收到一条警告消息“ 您尝试打开“文件名”的文件格式与文件扩展名指定的格式不同。 在打开>文件之前,请validation文件是否已损坏,并从可信来源validation>。 你想现在打开文件吗?“ 当我打开它时,一切看起来都很好,但我不明白为什么会发生这种情况。 我在这个程序中的下一步是将xls中的数据导入到SQL中,但是我担心这会导致问题。 这里是我调用SaveAs方法来更改文件的文件扩展名的代码行。 wb.SaveAs("filename.xls", FileFormat: Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook); 我最初只是有 wb.SaveAs("filename.xls"); 当我得到错误后,我做了一些更多的挖掘,发现xlOpenXMLWorkbook ,但似乎没有帮助。 任何可以帮助我理解为什么会发生的信息将不胜感激。

Excel Interop意外地打开了第二个Excel实例

我正在尝试在一个IDisposable接口中包装一个Excel.ApplicationClass ,使其在使用后自动closures。 我所拥有的东西如下所示: module Excel = type Application() = member private this.excel = new Excel.ApplicationClass() interface IDisposable with member this.Dispose() = this.excel.Quit() Marshal.ReleaseComObject(this.excel) |> ignore 当我在像一个函数中调用它 let func = use ex = new Excel.Application() () 两个Excel实例被启动(我可以在我的任务pipe理器中看到),但是只有其中一个被再次closures。 有谁能告诉我我在做什么错在这里?

如果文本被触发,如何忽略Excel单元格值?

我正在使用Microsoft的Excel InteropparsingExcel电子表格。 我被指示忽略任何“被击穿”的价值观(见图)。 我用来获取值的代码很简单: string cellValue = Convert.ToString(cell.Value); 也许我可以检查cellValue每个字符,看看它的ASCII码是否超出了可接受的范围? 编辑:在下面的答案的帮助下,我能够通过执行以下操作来解决这个问题: if (cellValue.Font.Strikethrough) { continue; } else { // process value }

如果pipe理员用户注销,服务器上的Excel应用程序无法工作

我有一个ASP.NET应用程序,它使用Microsoft内置程序集来读取,写入和修改Excel文件,并在服务器计算机上使用Excel 2013。 应用程序工作正常,如果我以pipe理员身份login到服务器机器,但是当我注销应用程序无法初始化Excel应用程序。 这是例外。 System.Runtime.InteropServices.COMException (0x8000401A) 应用程序正在MS Excel 2013 32位Windows Server 2008R2上运行我无法弄清楚这种行为的原因。 这是关于COM对象的安全选项,或者它与IIS权限有关吗?

Excel互操作不接受带逗号的范围

根据Workbook.Range 的文档 ,您可以在第一个参数中提供逗号来提供联合。 但是,下面的代码在获取范围的行上抛出一个带有HRESULT 0x800A03EC的COMException : using Microsoft.Office.Interop.Excel; public void RangeWithCommas() { var excel = new Application(); var wb = excel.Workbooks.Add(xlWBATemplate.xlWBATWorksheet); var ws = (Worksheet)wb.Worksheets[1]; var range = ws.Range["A1,A2"]; // this throws an exception Console.WriteLine(range.Address[false,false]); ws.Delete(); wb.Close(false); excel.Quit(); } 我该怎么做或解决这个问题? PS我知道Application.Union,但我非常希望不要使用它,因为没有简单的方法来提供可变数量的参数。

在追加三列后,将数据写入错误的位置

我将数据从一个位置复制到另一个位置,并且能够读取和打印所有值,并能够在Excel文件中附加三列。 所以现在A,B,C栏成了D,E,F(转移)等等。 Excel.Application app = new Excel.Application(); Excel.Workbooks workbooks = app.Workbooks; string newlocation_filename = @"C:\Windows\Temp\" + FileName; File.Copy(FilePath, newlocation_filename, true); //string filename = FilePath; workbooks.Open(newlocation_filename); Excel.Workbook workbook = workbooks.Item[1]; Excel.Sheets worksheets = workbook.Worksheets; Excel.Worksheet worksheet = (Worksheet)worksheets.Item[1]; Excel.Range cells = worksheet.UsedRange; Range oRng = worksheet.Range["A1"]; oRng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,XlInsertFormatOrigin.xlFormatFromRightOrBelow); oRng = worksheet.Range["B1"]; oRng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,XlInsertFormatOrigin.xlFormatFromRightOrBelow); oRng = worksheet.Range["C1"]; oRng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,XlInsertFormatOrigin.xlFormatFromRightOrBelow); cells[1, […]

为什么我的电子表格保存为.xlsx扩展名,但是直到我将其更改为.xls才会发生?

我打开一个现有的.xlsx文件,对其进行更改,然后将其保存回磁盘。 更改正在工作,但是当我尝试打开文件(手动,通过在Windows资源pipe理器中双击),我得到“ Excel无法打开文件'Bla.xlsx',因为文件格式或文件扩展名无效validation文件没有被损坏,并且文件的扩展名与文件的格式相匹配。 “ 如果我将扩展名从“xlsx”更改为“xls”,打开就好了。 但原始文件是.xlsx,我想保持这种方式。 这是我的代码: // Open the file MSExcel.Excel.ApplicationClass xlApp = new MSExcel.Excel.ApplicationClass(); MSExcel.Excel.Workbook xlBook = xlApp.Workbooks.Open(sourceFilename, 0, false, 5, null, null, false, MSExcel.Excel.XlPlatform.xlWindows, null, true, false, 0, true, false, false); MSExcel.Excel.Sheets xlSheets = xlBook.Worksheets; MSExcel.Excel.Worksheet xlSheet = (MSExcel.Excel.Worksheet)xlSheets.Item[1]; // Change the file MSExcel.Excel.Range priceTypeCell = (MSExcel.Excel.Range)xlSheet.Cells[7, 3]; //if (priceTypeCell.Value2.ToString() == "Price […]

Excel IF语句导致错误:来自HRESULT的exception:0x800A03EC

我正在C#中创build一个Excel报告。 当我添加下面的公式时,一切工作正常: totalCellFormulaRange.Formula = "=SUM(AH7:AS7)"; //totalCellFormulaRange is a Range object from Microsoft.Office.Interop.Excel 但是现在当我尝试添加一个由下面的if语句组成的公式时, memberGuidesCellFormaulaRange.Formula = "=IF(LEFT(D7;12)=\"Welcome Pack\";O7*$AQ$4;0)"; 那么我得到这个错误: 来自HRESULT的exception:0x800A03EC 如果在Excel工作表中input上面的if语句,则工作是100%。 它只在C#中失败,并且当它碰到这行代码时抛出exception。

get_Offset和Offset之间的区别?

我不明白get_Offset和Offset之间的区别: MSDN在NamedRange.get_Offset状态 此API支持Visual Studio基础结构,不能直接在您的代码中使用。 使用“偏移”属性而不是此方法。 那究竟是什么意思? 对于直接在代码中广泛使用的get_Value方法也有类似的说法 。 以下面的例子对我来说也是一样的。 myRange.get_Offset(1,0).Value = "Foo"; myRange.Offset[1,0].Value = "Foo"; 他们有什么不同?

使用Excel Interop Com对象时消除“2点”的使用 – C#

我无法发布Excel Interop Com对象,当我尝试保存并closures通过Excel Interop创build的Excel工作簿时,导致我的C#应用​​程序崩溃。 我觉得问题是,在某些情况下,我正在使用“2点”与excel互操作COM对象,从我读过的是不允许的。 我已经从大多数代码行中消除了2个点,但是我正在设法重新创build以下代码行,以便它们只使用一个点。 如果有人有任何build议,我将不胜感激。 workbook = (Excel.Workbook)app.Workbooks.Open(startForm.excelFileLocation,); workbook = (Excel.Workbook)app.Workbooks.Add(1); workSheet_range.Font.Color = System.Drawing.Color.FloralWhite.ToArgb(); workSheet_range.Font.Bold = font; workSheet_range.Interior.Color = System.Drawing.Color.Red.ToArgb();