Tag: interop

在C#中计算过滤excel范围的行

我一直在AC#项目工作,我想要完成的是计数在C#过滤范围的可见行。 首先,我创build一个我要过滤的范围。 Range usedRange = sheet.Range[sheet.Cells[7, 1], sheet.UsedRange.SpecialCells(XlCellType.xlCellTypeLastCell)]; 然后,我申请2个filter: usedRange.AutoFilter(20, "<>RAW", XlAutoFilterOperator.xlFilterValues, "<>AV", true); usedRange.AutoFilter(2, "ARG", XlAutoFilterOperator.xlFilterValues, Type.Missing, true); 最后,我创build另一个范围,使用“XlCellType.xlCellTypeVisible”并尝试对行进行计数, 但计数返回1 argFiltered = usedRange.SpecialCells(XlCellType.xlCellTypeVisible); Console.WriteLine("Number of rows: "+ argFiltered.Rows.Count) // the count returns 1. 如果我循环通过范围我可以得到计数。 但是,如果数据量很大,这会使stream程变慢。 //this is not effective foreach (Range area in argFiltered.Areas) { foreach (Range areaRow in area) { count++; } } […]

用后期绑定创build和填充Excel工作表

我一直在使用Visual C#.NET来查看Office自动化服务器的Microsoft支持页面绑定,尝试创buildExcel工作表,使用数据表中的值填充它,并将其保存到计算机中。 我有一个使用早期绑定,并简单地循环通过项目的实现,但我不知道你如何实现这与后期绑定,我需要能够embeddedInteroptypes,使应用程序版本独立于关于MS Office。 如何使用迟绑定将数据表中的行添加到新的Excel工作表中?

BindToMoniker打开一个新的Excel会话

以下代码尝试附加到打开了C:\ test文件的Excel会话。 如果这样的会话不存在,则返回null或抛出exception。 var myExcelWorkbook = Marshal.BindToMoniker(@"C:\test") as Excel.Workbook; 这个文件没有扩展名时效果很好。 但是,如果我正在尝试使用具有扩展名的文件(例如C:\ test.xlsb)完全相同的代码,则调用会在返回之前尝试使用excel打开该文件。 如果一个实例已经在运行,它将尝试在该实例中打开文件(就像在Windows资源pipe理器中双击该文件一样)。 var myExcelWorkbook = Marshal.BindToMoniker(@"C:\test.xlsb") as Excel.Workbook; 这肯定与扩展(如何BindToMoniker知道如何打开Excel,否则?),但是非常烦人,因为我从来不想附加到一个现有的Excel文件没有已经打开的文件。 有没有办法禁用“function”? 我想BindToMoniker方法永远不会试图打开一个文件,让我决定在各种情况下做什么。

读取Excel单元格并设置行颜色

我正在使用Com Interop和C#。 我必须遍历一个Excel文件,在每个行中查找特定的值(总是在第2列)。 对于某些值,我需要将该行的背景颜色设置为红色。 我有麻烦: 读取单元格[i] [2]中第i行的值 设置该行的背景颜色。 基本上我正在寻找这样的东西(这是我可以find最好的谷歌search之后): // ws is the worksheet for (int i = 1; i <= ws.Rows.Count; i++) { Range range = ws.Cells[i][2]; int count = Convert.ToInt32(range.Value2.ToString()); if (count >= 3) { Range chronic = ws.UsedRange.Rows[i]; chronic.EntireRow.Cells.Interior.Color = 0xFF0000; } } 当然这不起作用。 我无法摆脱阅读牢房的第一个障碍。 任何意见表示赞赏。

如何使用C#中的互操作将整个现有的Excel范围移动到一行

如何使用C#中的互操作将整个现有的Excel范围移动到一行? 我需要在现有的Excel中只有data.I的第一行添加一个头。我想要移动整个范围一个编程在C#中设置。 我看到移动单元的东西,但移动的范围不清楚。 你能帮我一下吗?

Excel中的Interop CustomDocumentProperties导致挂起

我已阅读该页面如何正确清理Excel互操作对象? 但我遇到了一个我无法弄清楚的问题。 有一种情况是Excel实例被embedded,我的插件存在导致挂起。 我已经发布了所有的COM对象,并尝试使用VSTO中build议的双GC采集和GC等待线。 下面的代码工作,并没有挂起。 public static string GetCustomProperty(dynamic document, string propertyName) { string returnVal = string.Empty; dynamic customProperties = document.CustomDocumentProperties; if (customProperties != null) { // Nothing } Marshall.FinalReleaseComObject(customProperties); return returnVal; } 问题是,一旦代码更改为这个挂起。 public static string GetCustomProperty(dynamic document, string propertyName) { string returnVal = string.Empty; dynamic customProperties = document.CustomDocumentProperties; if (customProperties != null) { […]

如何处理C#中excel工作表的另存为对话框

我想在Excel表格中写几行,然后使用简单的C#程序保存。 但是每当它显示一个对话框“你想保存这个文件吗?” 是,不,取消选项。 我想selectyes,以便可以使用更新的数据保存文件。 这里是代码: string ID = "123456"; Microsoft.Office.Interop.Excel.Application xlApp; Microsoft.Office.Interop.Excel.Workbook xlWorkBook; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; xlApp = new Microsoft.Office.Interop.Excel.Application(); xlWorkBook = xlApp.Workbooks.Open(@"D:\Projects\Data\DataSheet.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet) xlWorkBook.Worksheets["source"]; //putting the value in excel. xlWorkSheet.Cells[2, 2] = ID; xlApp.Visible = true; //xlApp.ActiveWorkbook.save(); xlWorkBook.SaveAs(@"D:\Projects\Data\DataSheet.xlsx", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, […]

如何编辑或取消保护C#中受保护的Excel工作表中的单个单元格?

我试图通过使用Microsoft.Office.Interop.Excel操纵C#的Excel文件。 我试图操作的工作簿在用户之间共享保护。 我有文件密码,我有我想要访问和编辑单元格的密码。 如果我试图从Excel中做到这一点,我做到以下几点: 打开文件,input密码 去一个单元格,双击一个单元格进行编辑。 一个对话出现,要求我提供密码,我提供密码,然后我可以编辑。 我想从一个C#应用程序做到这一点。 我目前的代码如下: xl.Application excelApp = new xl.Application(); excelApp.Visible = true; xl.Workbook newworkbook = excelApp.Workbooks.Open(@"C:\1.xls", 0, false, 5, "password", "", false, xl.XlPlatform.xlWindows, "", true, false, 0, true, false, false); xl.Sheets excelSheets = newworkbook.Worksheets; xl.Worksheet excelWorksheet = (xl.Worksheet)excelSheets.get_Item("Sign On_Off"); excelWorksheet.Select(true); xl.Range myrange = excelWorksheet.get_Range("b16", "b16"); myrange.Value2 = "testing"; 最后一行给我这个错误信息: 您要更改的单元格或图表受到保护,因此是只读的。 […]

delphi,当在Excel Interop Worksheets集合上使用for循环时,我该怎么做“没有GetEnumerator存在”错误?

我试图编写一个Delphi程序,将通过Excel文件中的每个工作表循环,并格式化一些单元格。 不过,我在尝试使用Workbook.Worksheets集合中的for-in循环时收到错误。 错误具体是: [DCC错误] Office.pas(36):E2431 for-in语句无法对集合types“表格”操作,因为“表格”不包含“GetEnumerator”的成员,或者无法访问 这发生的代码行是: for Worksheet in Workbook.Worksheets do 工作表和工作簿的定义如下: var ExcelApp: ExcelApplication; var Workbook: ExcelWorkbook; var Worksheet: ExcelWorksheet; 我将这个代码从C#移植到Delphi,在其中工作。 有谁知道为什么我会得到这个GetEnumerator错误? 我正在使用Office 2007 Excel Interop文件和Embarcadero®Delphi®2010版本14.0.3593.25826。 提前致谢。

C#Com Interop:设置一行的背景颜色

我有一个用这个代码创build的Excel工作表: Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); Worksheet ws = (Worksheet)wb.Worksheets[1]; 我想循环遍历行和第二列中的每个具有特定值的行,我想将此行的背景颜色更改为红色。 任何意见表示赞赏。 问候。