Home > Back-end >  c# Sorting Rows in Excel using Microsoft Interop
c# Sorting Rows in Excel using Microsoft Interop

Time:09-17

I been trying to Sort a Range on basis of first Column (i.e dates). But when I run my code nothing seems to happen. There is no change in the file. Following is my code.

Excel.Application xlApp = new Excel.Application();
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;
        String file = @"C:\Book1.xlsx";
        xlWorkBook = xlApp.Workbooks.Open(file);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
       
        Excel.Range rng = xlWorkSheet.get_Range("B16", "I38");

        rng.Sort(rng.Columns[1, Type.Missing], Excel.XlSortOrder.xlDescending,
                        Type.Missing, Type.Missing, Excel.XlSortOrder.xlAscending,
                        Type.Missing, Excel.XlSortOrder.xlAscending,
                        Excel.XlYesNoGuess.xlYes, Type.Missing, Type.Missing,
                        Excel.XlSortOrientation.xlSortColumns,
                        Excel.XlSortMethod.xlPinYin,
                        Excel.XlSortDataOption.xlSortNormal,
                        Excel.XlSortDataOption.xlSortNormal,
                        Excel.XlSortDataOption.xlSortNormal);
        
       
        xlWorkBook.Close(true, misValue, misValue);

CodePudding user response:

Because you set null value to rngsort variable.

CodePudding user response:

In case if anyone is looking or a solution.

Excel.Application xlApp = new Excel.Application();
        # setup constants, workbook, sheet, etc.
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;
        String file = @"C:\Book1.xlsx";
        xlWorkBook = xlApp.Workbooks.Open(file);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        # identify the last row from the used range of the column of interest (column B in this case)
        Excel.Range UsedRange = xlWorkSheet.UsedRange.Columns["B:B"];
        int lastRow = UsedRange.Row   UsedRange.Rows.Count - 1;
        
        # get range of interest...B15:I<last row>
        Excel.Range rng = xlWorkSheet.get_Range("B15", "I"   lastRow);

        # finally, sort the rows of the range of interest according to the original criteria
        rng.Sort(rng.Rows, Excel.XlSortOrder.xlAscending,
                        Type.Missing, Type.Missing, Excel.XlSortOrder.xlAscending,
                        Type.Missing, Excel.XlSortOrder.xlAscending,
                        Excel.XlYesNoGuess.xlYes, Type.Missing, Type.Missing,
                        Excel.XlSortOrientation.xlSortColumns,
                        Excel.XlSortMethod.xlPinYin,
                        Excel.XlSortDataOption.xlSortNormal,
                        Excel.XlSortDataOption.xlSortNormal,
                        Excel.XlSortDataOption.xlSortNormal);
        rng = null;
  • Related