如果您的工作表正上方有一个包含数据的空行,您可以在标题正上方添加匹配的公式。在下面假设您的列表位于 Sheet2 范围 B2:B5 并且您的数据标题从 Sheet1 范围 A2:D2 开始
Excel.Workbook myBook = xlApp.Workbooks.Open(@"path\excel.xlsx");
Excel.Worksheet ws = myBook.Worksheets[1];
// You can use all dynamic ranges instead
// Excel.Range xlRng = ws.Range[ws.Cells[yourRow, firsColumn], ws.Cells[yourRow, lastColumn]];
Excel.Range xlRng = ws.Range[ws.Cells[1, 1], ws.Cells[1, 4]]; // ws.Range["A1:D1"];
xlRng.FormulaR1C1 = "=MATCH(R[-1]C,Sheet2!R2C2:$R5C2,0)";
// Below is how you can get full address for your list if it's in different workbook and replace Sheet2!R2C2:$R5C2 with rangeFullAddress
// string rangeFullAddress = xlRng.Address[true,true,Excel.XlReferenceStyle.xlR1C1,true];
xlRng.Calculate();
xlRng.Value = xlRng.Value;
在此之后,您可以使用 Excel 按第一行排序来对数据进行排序。对第一行进行排序后,它看起来像这样:1、2、3、4。然后清除第一行上的数据ws.Range["A1:D1"].Clear();。
您的排序键将是Key1: ws.Range["A1:D1"],这里是 c# 排序示例using c# to sort a column in excel 只需更改 Excel.XlSortOrientation 并根据您的范围进行调整。
还有其他排序方式,但这样您可以在数据中保留单独的格式、每个单元格的 cmets
我错过了 1 个重要细节 - 您的列表不在 Excel 工作表中,但您可以将其添加到 Excel,可能在临时工作簿中或在同一张工作表上:
object [,] columnHeaders = new object[3,0]; // or object[0,3]; if you'd like to add into 1 row
columnHeaders[0, 0] = "Variable1";
columnHeaders[1, 0] = "Variable2";
columnHeaders[2, 0] = "Variable3";
columnHeaders[3, 0] = "Variable4";
xlRng.FormulaR1C1 = columnHeaders; // xlRng would be in the above Sheet2!R2C2:$R5C2