C#重新排序Excel工作表的列

时间:2017-08-03 11:50:39

标签: c# excel sorting

我有一个带有一些数据的Excel工作表。我还有一个工作表的列标题列表。列表中的标题与工作表中的标题的顺序不同,我需要将Excel工作表的列重新排序为与列表相同的顺序。

List<string> dataset1Variables = new List<string>() { "Variable1", "Variable2", "Variable3", "Variable4" };

我的Excel表格的标题可能如下所示:

变量3 |变量1 |变量4 |变量2

我遇到过这个代码来移动列,但这只是用于将1列移动到特定位置。该列表可能完全混淆,因此我需要移动许多列。

Excel.Range copyRange = xlWs.Range["C:C"];
Excel.Range insertRange = xlWs.Range["A:A"];
insertRange.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, 
copyRange.Cut());

这样做的最佳方法是什么?最好使用Interop。

1 个答案:

答案 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"]