我已经开始使用C#为Excel 2003编写一个Com插件。 我正在寻找一个代码示例,展示如何从活动工作表中读取单元格数据。 我已经看到你可以编写这样的代码:

Excel.Range firstCell = ws.get_Range("A1", Type.Missing);
Excel.Range lastCell = ws.get_Range("A10", Type.Missing);
Excel.Range worksheetCells = ws.get_Range(firstCell, lastCell);

抓住一系列细胞。 我可以使用的帮助是当你不知道有多少行数据时如何读取单元格数据。 我或许可以确定数据将从哪个起始行开始,但是将会有未知数量的数据行要读取。

有人可以向我提供一个如何从工作表中读取行直到遇到一排空单元格的示例吗?

还有谁知道如何获取用户选择的单元格范围?

任何帮助将不胜感激。 这似乎是一个强大的开发工具,但我找不到详细的文档来帮助我学习它:)

#1楼 票数:3 已采纳

我可以想到两种方法。 第一个选择是使用命名范围,而不是单元格的位置。 在这种情况下,您可以使用例如名称A1:A10“MyList”,并使用将内容读入数组

Excel.Range range = worksheet.get_Range("MyList", Type.Missing);
object[,] data = (object[,])range.Value2;

好处是,如果您调整命名范围的大小(例如,通过在工作表中插入行或列),这仍然可以正常工作。
您也可以阅读,直到遇到空单元格或空单元格,但您必须逐个单元格读取。 如果您的单元格很少,那么这不是问题,但如果您处理的是大量数据(例如100个单元格),逐个单元格读取会降低您的速度。 我没有尝试过代码,但是这些行中的某些内容应该从startRow开始并继续直到找到一个空行:

     int startRow = 1;
     bool hasContent = false;

     int row = startRow;
     do
     {
        var cell = (Excel.Range)sheet.Cells[row,1];
        if (cell.Value2 != null)
        {
           hasContent = true;
           row++;
        }
     }
     while (hasContent);

#2楼 票数:0

使用此代码,它应该找到最后一行,在它的第一列中它将是“结束”。

var lastExcel = worksheet.Rows.get_End(XlDirection.xlDown); lastExcel.Cells[worksheet.Rows.get_End(XlDirection.xlUp).Row + 1, 1].Value2 = "End";

  ask by user169867 translate from so

未解决问题?本站智能推荐:

2回复

在没有安装Office Beeing的情况下读取excel文件

有没有一种方法可以读取.NET中的excel(2003)文件,而无需安装Office beeing甚至可能没有任何第三方库? 为了能够使用VSTO,我想需要安装Office,对吗? 但是ADO.NET(例如Microsoft.Jet.OLEDB.4.0,Extended Proper
3回复

VSTO:无法打开另一个Excel文件,而第一个文件被加载项中的模式窗口阻止

我们无法打开另一个Excel文件,而第一个文件被加载项中的模式窗口阻止。 关闭对话框窗口将冻结所有打开的待处理文件。 Excel版本是2007。是否有程序设计的变通办法,它允许Microsoft Excel 2007在单独的窗口中打开第二个文件,而第一个窗口正在等待加载项退出模式对话框窗
3回复

当我打开Excel时,出现第二个Excel插件(功能区)安装,为什么?

我做了一个Excel Add in(Ribbon)。 运行.vsto并安装它时,我在Windows的“程序”下进行了一个安装。 但是,当我打开Excel程序时,另一个安装会出现在“程序”列表中。 为什么会这样呢?不应该那样吗? 更新:我注意到在Application我设置
1回复

使用 MS Excel VSTO 插件 如何禁止标准 Excel 的“另存为”功能并显示自定义窗口进行保存?

我正在创建一个 Excel VSTO 加载项。 我想在按下“另存为”时抑制标准的“另存为”并打开自定义窗口。 我已经能够在保存(即 Ctrl + S)操作时显示自定义保存对话框。 通过这个窗口,我可以将文档直接保存在云上,而不是保存在本地。 同样,我想取消标准的“另存为”并打开自定义窗口。
1回复

是否可以编写在Excel 2003和2007中都可以使用的Addin?

我一直在为Excel 2003写一个共享的插件。它添加了一个菜单(CommandBarPopup)和几个菜单项(CommandBarButton),单击这些菜单项可以打开WPF窗口以读取几个值并处理工作表。 有没有办法编写它使其也可以在Office 2007/2010中使用,还是不可能?
1回复

使用VSTO在Excel中创建命名范围的事件

有什么方法可以使用VSTO参与Excel 2007中命名范围或列表对象的创建吗? 我需要跟踪工作表中的命名范围,因此,当创建一个新的范围时需要发出警报。 我已经尝试了SheetChange和SheetCalculate事件,但是在创建新的命名范围时都不会触发这两个事件。
2回复

如何使用C#制作excel单元ReadOnly?

当我将AllowEdit属性设置为false时,将显示编译错误: 错误:无法将属性或索引器“Microsoft.Office.Interop.Excel.Range.AllowEdit”分配给 - 它是只读的 如何将单元格范围设置为只读? 当我使用此范围的验证时,我的C
3回复

无法创建VSTO Excel工作簿项目

我在两台计算机上遇到两个问题,我还有另外一个关于打开现有VTSO Excel工作簿的问题。 然而,这个问题是关于用VSTO创建一个新项目。 如果我在新项目中选择Excel 2013 Workbook C#,并选择创建新工作簿,它将开始打开Excel,然后我在VS中收到此错误 真正奇怪