我有一个带有一些数据的Excel工作表。我还有一个工作表的列标题列表。列表中的标题与工作表中的标题的顺序不同,我需要将Excel工作表的列重新排序为与列表相同的顺序。
List<string> dataset1Variables = new List<string>() { "Variable1", "Variable2", "Variable3", "Variable4" };
我的Excel表格的标题可能如下所示:
我遇到过这个代码来移动列,但这只是用于将1列移动到特定位置。该列表可能完全混淆,因此我需要移动许多列。
Excel.Range copyRange = xlWs.Range["C:C"];
Excel.Range insertRange = xlWs.Range["A:A"];
insertRange.Insert(Excel.XlInsertShiftDirection.xlShiftToRight,
copyRange.Cut());
这样做的最佳方法是什么?最好使用Interop。
答案 0 :(得分:0)
如果您的工作表上方有一个空行和数据,则可以在标题正上方添加匹配的公式。在下面假设你的列表在Sheet2范围B2:B5上,你的数据头从Sheet1范围A2开始:D2
$date = new DateTime($dif);
$date->add(new DateInterval('PT'.$hours.'H'.$minutes.'M'.$seconds.'S'));
$date_format = $date->format('H:i:s');
$posts[7]=$date_format;
在此之后,您可以使用Excel排序第1行对数据进行排序。排序第一行后,它将如下所示:1,2,3,4。然后清除第1行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;
上的数据。
您的排序键为ws.Range["A1:D1"].Clear();
,此处为c#sort example using c# to sort a column in excel,只更改Excel.XlSortOrientation并根据您的范围进行调整。
还有其他方法可以排序,但这样您就可以保留各个格式,数据中每个单元格的注释
我错过了一个重要的细节 - 您的列表不在Excel工作表中,但您可以将其添加到Excel中,可能在临时工作簿中或在同一工作表中:
Key1: ws.Range["A1:D1"]