我可以XlCellType.xlCellTypeLastCell
用来查找使用范围内的最后一个单元格。如何在一行中获得第一个单元格?
代码以获取最后一个单元格位置。
Excel.Range mergeCells = (Excel.Range)mergeSheet.Cells[6,1].EntireRow;
var rowRng = mergeCells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing);
var colPosition = rowRng.Column;
一种方法是获取mergeCells.value
并循环通过以递增计数器,直到看到空值/空值。但是我希望能做到这一点。有任何想法吗 ?
测试用例:
(1)
预期结果colPosition = 1
预期结果colPosition = 5
这是使用Excel Interop库的解决方案(如问题中所标记)。下面的方法将返回给定行中第一个单元格的从1开始的列索引。它适用于您提供的测试用例以及我自己的一些用例。请注意,如果您只想使用已使用范围中的第一行-而不是提供的行,则可以使用来找到首先使用的行号ActiveSheet.UsedRange.Rows[1].Row
。
public static int FindFirstCellInExcelRow(string filePath, int rowNum)
{
Excel.Application xlApp = null;
Excel.Workbook wkBook = null;
Excel.Worksheet wkSheet = null;
Excel.Range range = null;
try
{
xlApp = new Excel.Application();
wkBook = xlApp.Workbooks.Open(filePath);
wkSheet = wkBook.ActiveSheet;
range = wkSheet.Cells[rowNum, 1].EntireRow;
if (range.Cells[1, 1].Value != null)
{
return range.Cells[1, 1].Column;
}
var result = range.Find(What: "*", After: range.Cells[1, 1], LookAt: Excel.XlLookAt.xlPart, LookIn: Excel.XlFindLookIn.xlValues, SearchOrder: Excel.XlSearchOrder.xlByColumns, SearchDirection: Excel.XlSearchDirection.xlNext, MatchByte: false, MatchCase: false);
int colIdx = result?.Column ?? 0; // return 0 if no cell in row contains value
return colIdx;
}
finally
{
wkBook.Close();
Marshal.ReleaseComObject(xlApp);
Marshal.ReleaseComObject(wkBook);
Marshal.ReleaseComObject(wkSheet);
Marshal.ReleaseComObject(range);
xlApp = null;
wkBook = null;
wkSheet = null;
range = null;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句