Tag: excel interop

我怎样才能得到一个价值来展开Excel中的多行?

我需要放置一个跨越四行的文本值。 我想/希望这会工作: private int curDescriptionTopRow = 8; . . . private void AddDescription(String desc) { int curDescriptionBottomRow = curDescriptionTopRow + 3; _xlSheet.Range[_xlSheet.Cells[curDescriptionTopRow, 1], _xlSheet.Cells[curDescriptionBottomRow, 1]].Font.Bold = true; _xlSheet.Range[_xlSheet.Cells[curDescriptionTopRow, 1], _xlSheet.Cells[curDescriptionBottomRow, 1]].VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter; _xlSheet.Range[_xlSheet.Cells[curDescriptionTopRow, 1], _xlSheet.Cells[curDescriptionBottomRow, 1]].Value2 = desc; curDescriptionTopRow = curDescriptionTopRow + 4; } 我需要第一个描述在单元格A8 – A11(列A,第8-11行)中垂直居中显示。 上面的代码在所有四行中都添加了描述,而不是四行中的一次。 我怎样才能防止描述的三个多余的外观?

如何设置excel格式0.00%到0.0000十进制值

我们需要导出一些数据到excel这是很好,数据是在百分比,因此我提供 cell.NumberFormat = "0.00%" 导出值的数据types是十进制的,因此上面的格式工作正常。 但问题发生在值为0.00000000000000000 excel无法设置格式,因此当我们打开导出的Excel文件时,它说 Excel完成文件级别validation和修复。 此工作簿的某些部分可能已被修复或丢弃。 修复logging:来自/xl/worksheets/sheet.xml部分的单元信息 并且所有值为0的单元格都显示一个标签, 在这个单元格中的数字被格式化为文本或者前面有一个撇号。 当值为0.023443434343 excel格式为2.34% ,格式为2位小数百分比; 我不知道为什么它不能提供格式为0值。

如何使用“平均”公式限制Excel单元格中的小数?

我正在使用C#Excel Interop来创build电子表格。 我在表单的底部使用“总计”部分的公式。 以下是我正在使用的代码: var totalTotalOrdersCell = (Range)_xlSheetDelPerf.Cells[curDelPerfRow + 2, TOTAL_ORDERS_COLUMN]; totalTotalOrdersCell.Formula = string.Format("=SUM(J10:J{0})", curDelPerfRow); var avgAvgWeeklyDeliveriesCell = (Range)_xlSheetDelPerf.Cells[curDelPerfRow + 2, AVG_WEEKLY_DELIVERIES_COLUMN]; avgAvgWeeklyDeliveriesCell.Formula = string.Format("=AVERAGE(K10:K{0})", curDelPerfRow); var avgAvgOrderAmountCell = (Range)_xlSheetDelPerf.Cells[curDelPerfRow + 2, AVG_ORDER_AMOUNT_COLUMN]; avgAvgOrderAmountCell.Formula = string.Format("=AVERAGE(L10:L{0})", curDelPerfRow); var avgAvgPackageCountCell = (Range)_xlSheetDelPerf.Cells[curDelPerfRow + 2, AVG_PACKAGE_AMOUNT_COLUMN]; avgAvgPackageCountCell.Formula = string.Format("=AVERAGE(M10:M{0})", curDelPerfRow); var totalTotalSalesCell = (Range)_xlSheetDelPerf.Cells[curDelPerfRow + 2, TOTAL_SALES_COLUMN]; […]

为什么当我尝试向我的电子表格中添加第三张表格时出现“无效索引”?

我有代码添加第三个工作表: // contextual code private Excel.Application _xlApp; private Excel.Workbook _xlBook; private Excel.Sheets _xlSheets; private Excel.Worksheet _xlSheet; private Excel.Worksheet _xlSheetDelPerf; private Excel.Worksheet _xlSheetListObjectTest; // the line that kablooeys (sp?): _xlSheetListObjectTest = (Excel.Worksheet)_xlSheets.Item[3]; // <= this is line 307, made infamous in the err msg screenshotted below 添加工作表1: _xlSheet = (Excel.Worksheet)_xlSheets.Item[1]; …和2: _xlSheetDelPerf = (Excel.Worksheet)_xlSheets.Item[2]; …工作得很好,但是当我撞到kablooifies(Item [3])时,我得到: […]

多语言excel格式条件公式在c#

这是我的第一个问题,所以我希望我做的一切都好。 我试图将一些格式(例如背景颜色)应用于excel范围的偶数行或奇数行。 我试图使用FormatCondition.Add方法。 问题是,应用程序必须在不同的excel语言(如西class牙语)工作。 当在Add方法中使用公式=MOD(ROW(),2)将格式应用于偶数行或奇数行时,会引发一个参数exception。 这里用西class牙语: System.ArgumentException:El valor noestádentro del intervalo esperado。 在这里,我最好的例外翻译: System.ArgumentException:该值不在预期的时间间隔之间。 问题似乎是公式中的字符。 如果我使用; exception消失,但然后excel不翻译公式,所以当我打开西class牙语的Excel文件条件格式不起作用。 我必须使用公式=RESIDUO(FILA();2)的西class牙语版本,但是这不会英文。 如果把公式放在一些随机单元格中,效果很好(所以我猜这个公式没有错): excelSheet.Cells[1, 1] = "=MOD(ROW(),2)"; 我的问题是:如何在FormatConditions.Add方法中使用多语言公式? 我的代码如下所示: excelRange = excelRange.FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, Formula1: "=MOD(ROW(),2)=" + par); “par”是区分偶数还是奇数的variables。 我试过改变线程文化: System.Globalization.CultureInfo before = System.Threading.Thread.CurrentThread.CurrentCulture; try { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); excelRange = excelRange.FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, Formula1: "=MOD(ROW(),2)=" + par); } finally { System.Threading.Thread.CurrentThread.CurrentUICulture […]

Excel会抛出exceptionHRESULT:0x800A03EC而用户仍在键入一个单元格和单元格值更改

我正在C#中创build一个Excel插件,并使用插件button单击来更改一些单元格值。 它工作顺利,但是,我注意到,如果用户试图在任何单元格(不仅是我改变值的东西),它总是会抛出HRESULT: 0x800A03ECexception。 我的代码很简单,例如我只用这段代码testing过了: private void buttonFoo_Click(object sender, RibbonControlEventArgs e) { var ws = Globals.ThisAddIn.Application.ActiveSheet; ws.Range["A1"].Value = "bar"; } 当我点击一个随机的单元格时,input“foo”,但是我没有点击工作表上的任何地方,我没有写完“foo”,而是点击buttonFoo,而我仍然集中在我的单元格中,抛出这个exception。 这张图片可以解释我想要做什么,我将点击图片上的testingbutton,同时仍然打字如下: 我以为这个例外发生了,如果我想在特定的单元格中input某些内容,而且特定的单元格也在我的代码中更改。 但事实并非如此。 我试过select一个不使用的单元格,如下所示: ws.Range["B1"].Select(); 没有帮助。 我试着发送ESC键取消用户input: excelApp.SendKeys("{ESCAPE}"); 我testing了这个,它实际上会发送Escape,但是它仍然会抛出一个exception。 我完全没有想法,并没有发现任何关于这个问题。 我的意思是我可以用try / catch寻找这个exception来包围所有东西,但是这太可怕了。任何人都知道该怎么做?

Excel Interop将斜杠添加到NumberFormat

我想通过Excel Interop设置整个列的NumberFormat: column.NumberFormat = "# ##0"; 但是,Excel添加了一个额外的斜杠(打开文档显示#\ ##0 )。 我发现以下相关的问题: Excel interop在我的数字格式string中添加斜线 但是,使用column.NumberFormatLocal ,我遇到了一个exception: 未处理的exception:System.Runtime.InteropServices.COMException:无法设置Range类的NumberFormatLocal属性 有任何想法吗?

使用C#Microsoft Interop Excel Excel 144行后返回空

在C#中,我已经打开了一个Excel电子表格,并且正在遍历它。 每当我到达第144行时,电子表格的值对于它后面的每一行都返回null。 看看电子表格,144 – 250行显然不为空。我尝试将它保存在不同的版本中,但是没有奏效。 我试图复制并粘贴到一个全新的工作表。 没有任何工作。 这是我的代码: // initiate Excel Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Open(lblFileName.Text, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); //Get the used Range Excel.Range usedRange = xlWorkSheet.UsedRange; //Iterate the […]

为什么FreezePane只能在第一张纸上使用?

我有这个代码,工作正常,添加一个FreezePane第7行,第一列第3列(从左数): private void FreezePane(int rowNum, int colNum) { Range cellToFreeze = (Range)_xlSheet.Cells[rowNum, colNum]; cellToFreeze.Activate(); cellToFreeze.Application.ActiveWindow.FreezePanes = true; } 在添加另外几张纸(第二张纸包含数据作为数据透视表的来源,第三张纸包含数据透视表)后,我想添加一个冻结面板在第三张/透视表的同一位置我试过这个: private void FreezePanePivotTable(int rowToFreeze, int colToFreeze) { Range pivotTableCellToFreeze = (Range)_xlPivotTableSheet.Cells[rowToFreeze, colToFreeze]; pivotTableCellToFreeze.Activate(); pivotTableCellToFreeze.Application.ActiveWindow.FreezePanes = true; } 那,虽然,崩溃与“ 激活方法的范围类失败exception来源:Microsoft Office ExcelexceptionStackTrace:在System.RuntimeType.ForwardCallToInvokeMember(… ” 所以我想,“也许你只能在工作簿中有一个冻结的窗格”,并试图只调用新的方法(留下第一个工作表解冻),我得到了这个看似怪异的错误味精:“ 无法设置大小属性的字体类 “ 发生这种例外的地方是在第二张纸上 – 纸张3 /数据透视表纸张的源数据! 为什么突然设置字体大小会导致问题? 最后一行是3418行: var itemCodeLabelCell = _xlPivotDataSheet.Cells[1, 1]; […]

使用C#的Microsoft.Office.Interop.Excel生成具有预先设置的下拉值的Excel文件

我想从我的C#应用程序生成一个Excel文件,用户将可以在以后填写。 我正在使用Microsoft.Office.Interop.Excel 。 我正在启动Excel并使用下面的代码填充标题单元格: var excelApp = new Excel.Application {Visible = true}; var workbook = excelApp.Workbooks.Add(Missing.Value); var workSheet = (Excel.Worksheet) workbook.Worksheets.Item[1]; headers.Select((s, i) => new Tuple<string, int>(s, i)).ToList().ForEach ( h => { workSheet.Cells[1, h.Item2 + 1] = h.Item1; } ); 我怎样才能指定第一列的单元格应该有一个包含预填充值的下拉菜单? 我已经尝试了大量的在线可用的东西,比如下面在这里find的,没有运气: var dropDownRange = workSheet.Range["A2"].Resize[64000]; dropDownRange.Value = Values; dropDownRange = dropDownRange.Offset[0, 1]; dropDownRange.Validation.Delete(); dropDownRange.Validation.Add(Excel.XlDVType.xlValidateList, […]