我正在寻找一种方法来收集每一行的数据,而无需循环遍历每一行的每个单元格以降低时间复杂度。
有没有办法实现类似于以下的东西?
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);
}
这是一个相当简单的例子,需要更多的工作......
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,然后简单地关闭它。这样可以确保不进行任何更改。