使用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);