使用c#在excel中对列进行sorting

我正在尝试使用INTEROP在excel的第一列对工作表进行sorting。 我只想在第一列中列出一个简单的整个范围。 我正在做以下事情:

valueRange.Sort(valueRange.Columns[7, Type.Missing], Excel.XlSortOrder.xlAscending, valueRange.Columns[7, Type.Missing], Type.Missing, Excel.XlSortOrder.xlAscending, Type.Missing, Excel.XlSortOrder.xlAscending, Excel.XlYesNoGuess.xlNo, Type.Missing, Type.Missing, Excel.XlSortOrientation.xlSortColumns, Excel.XlSortMethod.xlPinYin, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal); 

但得到错误。 我无法find如何做这种sorting适当的文件。

有人可以请给我一个简单的一个指定范围的特定列的工作示例?

根据文件我试图做到这一点:

 valueRange.Sort(valueRange.Columns[7, Type.Missing], Excel.XlSortOrder.xlAscending, Type.Missing, Type.Missing, Excel.XlSortOrder.xlAscending, Type.Missing, Excel.XlSortOrder.xlAscending, Excel.XlYesNoGuess.xlNo, Type.Missing, Type.Missing, Excel.XlSortOrientation.xlSortColumns, Excel.XlSortMethod.xlStroke, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal); 

但是现在我正在接受错误:

 {"The sort reference is not valid. Make sure that it's within the data you want to sort, and the first Sort By box isn't the same or blank."} 

为了在该范围内对单个列进行sorting,您可以执行以下操作(如果您使用的是VS 2010及更高版本,则使用“dynamic”关键字):

 dynamic allDataRange = worksheet.UsedRange; allDataRange.Sort(allDataRange.Columns[7], Excel.XlSortOrder.xlDescending); 

在我的示例中,我有一个包含10列左右的电子表格,我想按照第7列的顺序对整个电子表格进行sorting。

我被上面的答案帮助,但是当我尝试Code4Life的片段:

 dynamic valueRange = GetTheRange(); valueRange.Columns.get_Item(1)).Sort(valueRange.Columns[1]); 

它只对范围的第一列进行sorting。 OP要求将整个范围按一列进行sorting,而不是对一个范围内的一列进行sorting。 所以经过一些试验和错误,我得到了我上面的简化代码。

尝试这个:

 ((Excel.Range)valueRange.Columns.get_Item(1, Type.Missing)) .Sort(valueRange.Columns[1, Type.Missing], Excel.XlSortOrder.xlAscending, Type.Missing, Type.Missing, Excel.XlSortOrder.xlAscending, Type.Missing, Excel.XlSortOrder.xlAscending, Excel.XlYesNoGuess.xlGuess, Type.Missing, Type.Missing, Excel.XlSortOrientation.xlSortColumns, Excel.XlSortMethod.xlPinYin, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal); 

基本上,从Column Sort ,而不是基本范围。

另外,如果可以,我强烈build议使用Visual Studio 2010。 上面的代码在VS 2010中被简化为:

 dynamic valueRange = GetTheRange(); valueRange.Columns.get_Item(1)).Sort(valueRange.Columns[1]); 

编辑 :如果您需要跨多列进行sorting,Excel允许您sorting最多列。 以下是你如何做到这一点:

 valueRange.Sort(valueRange.Columns[1, Type.Missing], // the first sort key Excel.XlSortOrder.xlAscending, valueRange.Columns[2, Type.Missing], // second sort key Type.Missing, Excel.XlSortOrder.xlAscending, valueRange.Columns[3, Type.Missing], // third sort key Excel.XlSortOrder.xlAscending, Excel.XlYesNoGuess.xlGuess, Type.Missing, Type.Missing, Excel.XlSortOrientation.xlSortColumns, Excel.XlSortMethod.xlPinYin, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal); 

EDIT2 :将值加载到二维数组中:

 var myArray = (object[,])valueRange.Value2; 

将数组加载回范围内:

 var arrayCount = myArray.GetLength(0); var columnCount = GetTheColumnCountHere(); valueRange = valueRange.get_Resize(arrayCount, columnCount); valueRange.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, myArray);