Попробуйте это:
((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);
В основном, сделайте ваш Sort
из Column
, а не базовый диапазон.
Кроме того, я настоятельно рекомендую использовать Visual Studio 2010, если вы можете. Приведенный выше код упрощается до этого в VS 2010:
dynamic valueRange = GetTheRange();
valueRange.Columns.get_Item(1)).Sort(valueRange.Columns[1]);
EDIT :
Если вам нужно отсортировать по нескольким столбцам, Excel позволяет сортировать до трех столбцов. Вот как бы вы это сделали:
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 :
Загрузка значений в 2D массив:
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);