在 C# 中使用 Microsoft.Office.Interop.Excel

问题描述 投票:0回答:1
我正在尝试从 excel 工作表的每一行收集数据,并将其转换为以逗号分隔的字符串,以便使用字典进行比较。

我正在寻找一种方法来收集每一行的数据,而无需循环遍历每一行的每个单元格以降低时间复杂度。

有没有办法实现类似于以下的东西?

Dictionary<string, int> cwData = new Dictionary<string, int>(); string key = ""; foreach (Range row in cwRange) { key = string.Join(",", row.Value); cwData.Add(key, row.Row); print(key); }
    
c# visual-studio excel-interop
1个回答
0
投票
如果是我,我会使用您正在使用的工具的强大功能为我进行连接。

这是一个相当简单的例子,需要更多的工作......

static void ConcatenateRange() { var xlApplication = new Microsoft.Office.Interop.Excel.Application(); var xlWorkbook = xlApplication.Workbooks.Open("C:\\temp\\Data.xlsx"); try { var xlWorksheets = xlWorkbook.Worksheets; var xlWorksheet = (Worksheet)xlWorksheets.Item[1]; var lastCell = (Range)xlWorksheet.UsedRange.SpecialCells(XlCellType.xlCellTypeLastCell).Offset[1, 1]; lastCell.Formula = "=TEXTJOIN(\",\",TRUE,A1:O15)"; var concatenatedString = lastCell.Value; Console.WriteLine(concatenatedString); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { xlWorkbook.Saved = true; xlWorkbook.Close(); xlApplication.Quit(); } Console.ReadLine(); }
...但基本上,它会打开一个工作簿,找到您正在使用的工作表的最后一个单元格,将最后一个单元格偏移 1 行和 1 列(显然这假设没有使用整个工作表)然后抛出一个

TEXTJOIN

公式来完成工作而无需循环。

这是工作表...

...这是结果(在控制台输出中)...

最后一点是,它将工作簿的保存状态设置为 true,然后简单地关闭它。这样可以确保不进行任何更改。

© www.soinside.com 2019 - 2024. All rights reserved.