Tag: c#

Excel.Worksheet.Cells =“=公式”与Range.set_Value(Missing.Value,arrayFormulas)

Excel.Worksheet.Cells[row,col] = "=Formula / reference" 在上面的Excel中更新公式/参考,并在数据表中显示结果,在下面的代码中,当使用Range.set_Value(..) ,数据表完全不会更新 string[,] myFormulas = new string[nrRows, nrColumns]; … myFormulas [x,y] = eg "=SUM(D1:D" + rowNr + ")"; myFormulas [x,y+1] = eg "=Table1!A1"; … Range.set_Value(Missing.Value, myFormulas) 它只显示公式为string,例如=Table1!A1 。 我无法更新。 无论是CalucalteAll() ,也不是与RefreshAll() ,也不是。 任何build议如何实现数据表中的更新? 编辑:您可以使用单个语句Range.set_Value(Missing.Value, myFormulas)设置整个数组。 我的问题是如何使excel评估这个数组中的公式(而不是把它们当作简单的string,或者把Excel中的单元格重新计算一个一个地设置)。

使用OpenXML创build合并单元格

请考虑这个Excel: 它是XML: 我想要使​​用OpenXML创build具有多个合并单元格的Excel。 我怎么能做到这一点? 谢谢

如何使用Excel Interop获取过滤行的范围?

我正在使用Excel互操作程序集为我的项目,如果我想使用自动filter,那么可能使用 sheet.UsedRange.AutoFilter(1,SheetNames[1],Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd,oMissing,false) 但我怎么能得到过滤行? 任何人都可以有想法?

如何将一些VBA代码embedded到使用ClosedXML创build的电子表格中?

我正在使用ClosedXML从C#(asp.net-mvc)生成电子表格,它工作的很好。 我还有一个额外的要求,所以我想获得一些关于如何实现这一目标的反馈。 我想保存为一个macros启用工作簿,当我只是给它一个“xlsm”扩展它似乎并没有打开(与xlsx)。 这是我的代码: public ActionResult ExportExcel() { MemoryStream stream = nModel.GenerateSS(); return File(stream, @"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", "MySS.xlsx"); } 但如果我尝试这样做: public ActionResult ExportExcel() { MemoryStream stream = nModel.GenerateSS(); return File(stream, @"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", "MySS.xlsm"); } Excel试图打开时抱怨。 然后,假设我可以做#1,我需要能够采取一些VBA(假设只是一个硬编码函数),并插入到模块或工作簿,所以当有人打开电子表格,并点击macros,他们可以运行macros。 从谷歌search,这似乎并不支持ClosedXML,所以我很好奇,如果有人有任何其他方式来实现这一目标?

遍历Excel范围

我正在使用Excel应用程序SheetChange事件来捕获我的Excel应用程序表中的任何更改。 如果用户仅修改1个单元格,则可以通过以下方式来获取单元格坐标: void CellsChange(object Sh, Excel.Range Target) { …. string changedCell = Target.get_Address(Missing.Value, Missing.Value, Excel.XlReferenceStyle.xlA1, Missing.Value, Missing.Value); …. } 在上面的例子中,典型的返回值是“$ C $ 11”。 但是,如果用户通过突出显示多个单元格来修改一系列单元格,并使用shift-enter填充整个范围,则返回的string可能类似于:“$ C $ 11:$ K $ 11”(指示一个9格的行中改变)。 我如何迭代抛出范围? 获取每个单元格坐标和值在foreach或for循环。 我尝试了以下… for (int i = 0; i < Target.Count; i++) { Excel.Range r = Target.Item[i]; MessageBox.Show(Convert.ToString(r.Value2)); } 但是这个代码并没有给我原来的范围单元格新的价值。 我也没有遵循Target.Item逻辑 – 它是基于零的数组还是基于一个数组。 在几次尝试中,它看起来像Item数组是整个表格单元格区域格式化为数组(因此也可以使用Item [0],这是高亮区域左侧的一个单元格)。 […]

获取Excel范围对象的最后一个单元格(列,行)

我有一个Microsoft.Office.Interop.Excel.Range对象,并希望估计该范围的结束坐标,即(最后一列,最后一行)。 没有像LastCol , LastRow属性。 唯一的属性是Column和Row ,它们指定了第一个单元格。 但是我怎样才能得到范围的最后一个单元?

在VSTO Excel中,如何检测单元格中的数据?

我想知道是否有人知道如何快速检测给定的工作表中是否有数据,而不需要实际遍历工作表中的所有行/列来解决这个问题。 我正在编写一个导入程序,将数据直接导入活动工作表(如果尚未修改),或者创build新的工作表并导入到其中。 我目前正在循环浏览整个表格,而且我的导入有一些明显的滞后时间。 我将不胜感激任何帮助。 谢谢!

在excel工作簿中使用interop抛出错误写长文本?

我正在写长文本(1K到2K字符长,普通的XML数据)到Excel工作簿中的单元格。 下面的语句抛出从HRESULT:0x800A03EC COM错误exception range.set_Value(Type.Missing, data); 如果我复制粘贴相同的XML手动到Excel中,它只是工作正常,但同样不能正常工作。 如果我把文字去掉像100/300字符这样的文字就可以了。

悬挂互操作COM对象的问题

我有一个应用程序使用COM互操作来创build一个电子表格,在客户端的机器上的Excel中打开。 不过,如果我查看任务pipe理器,用户closuresExcel时EXCEL.exe进程并不总是结束。 如果我保存工作簿并以编程方式closuresExcel,则只需使用Marshal.ReleaseComObject()进行清理,但由于我依赖于手动closures程序,所以我不知道该怎么做。 有什么build议么?

Gridview到Excel

我有一个与AutoGenerateDeleteButton 而我出口这个gridview简单的代码.. Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=Avukat.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.xls"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); GridView1.RenderControl(htmlWrite); Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); Response.Write(stringWrite.ToString()); Response.End(); 这没有问题。 但在Excel中有一个删除列:)) 我如何删除Excel中的删除列?