为了账号安全,请及时绑定邮箱和手机立即绑定

c# excel 如何在使用的范围内查找第一个单元格。

c# excel 如何在使用的范围内查找第一个单元格。

C#
白衣非少年 2021-11-21 18:10:26
我可以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(2)预期结果 colPosition = 5
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

这是使用 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;

        }

    }


查看完整回答
反对 回复 2021-11-21
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我强烈 (x10) 建议在 Microsoft 的 Excel 库上使用 ClosedXML(除非您使用旧的 xls 文件)。使用 ClosedXML 您可以执行以下操作(这是从他们的网页中直接获取的):


从 NuGet 包中获取它。 Install-Package ClosedXML -Version 0.93.1


https://github.com/ClosedXML/ClosedXML/wiki/Finding-and-extracting-the-data


  var wb = new XLWorkbook(northwinddataXlsx);

  var ws = wb.Worksheet("Data");


  // Look for the first row used

  var firstRowUsed = ws.FirstRowUsed();


  // Narrow down the row so that it only includes the used part

  var categoryRow = firstRowUsed.RowUsed();


  // Move to the next row (it now has the titles)

  categoryRow = categoryRow.RowBelow();


  // Get all categories

  while (!categoryRow.Cell(coCategoryId).IsEmpty())

  {

    String categoryName = categoryRow.Cell(coCategoryName).GetString();

    categories.Add(categoryName);


    categoryRow = categoryRow.RowBelow();

  }


查看完整回答
反对 回复 2021-11-21
?
不负相思意

TA贡献1777条经验 获得超10个赞

试试下面的代码片段,这将给出 excel 使用范围的第一行


Excel.Workbook xlWB = Globals.ThisAddIn.Application.ActiveWorkbook;

Excel.Worksheet xlWS = xlWB.ActiveSheet;

int firstRow = xlWS.UsedRange.Row;


查看完整回答
反对 回复 2021-11-21
  • 3 回答
  • 0 关注
  • 398 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信