有没有办法使用vsto或c#在excel表中找到第一个可用的空白行? 我一直在寻找几个小时,但无法找到任何相关的东西。 在这方面的任何帮助将不胜感激
答案 0 :(得分:4)
Excel.Worksheet xlWorkSheet1 = (Excel.Worksheet)excelbk.Worksheets["Sheet1"];
xlRange = (Excel.Range)xlWorkSheet1.Cells[xlWorkSheet1.Rows.Count, 1];
long lastRow = (long)xlRange.get_End(Excel.XlDirection.xlUp).Row;
Long newRow = lastRow + 1
此链接中的代码:http://social.msdn.microsoft.com/Forums/pl/exceldev/thread/90384567-3338-4c56-bc6b-70db94d8cbcc
答案 1 :(得分:2)
有一个Range.End属性或Range.get_End方法与方向结合将为您提供范围中的第一个空白单元格。
请查看此问题以寻找可能的解决方案:How to find the Next blank row in Excel sheet programatically using C#
关键是:
Excel.Worksheet xlWorkSheet1 = (Excel.Worksheet)excelbk.Worksheets["Sheet1"];
xlRange = (Excel.Range)xlWorkSheet1.Cells[xlWorkSheet1.Rows.Count, 1];
long lastRow = (long)xlRange.get_End(Excel.XlDirection.xlUp).Row;
Long newRow = lastRow + 1
但是如果你有一个你知道的专栏将会一直填满所有的单元格直到最后一个单元格,那么你可以在向下的方向上结束。
答案 2 :(得分:2)
如果App是你的excel应用程序,你可以循环从数字1开始的行,并使用CountA函数查找第一个空(它返回一个范围的非空单元格数):
int rowIdx = 0;
int notEmpty = 1;
while (notEmpty > 0)
{
string aCellAddress = "A" + (++rowIdx).ToString();
Range row = App.get_Range(aCellAddress, aCellAddress).EntireRow;
notEmpty = _App.WorksheetFunction.CountA(row);
}
当while循环退出时,rowIdx是第一个空行的索引。
CountA会收到其他29个可选参数,因此您可能必须使用早期版本的框架将Missing.Value传递29次。