2016-03-09 4 views
1

Я пытаюсь вернуть минимальные и максимальные даты в столбце на листе excel. У меня есть программа, которую я создал в VBA, которую я переписываю на C# и не совсем уверен в этой части. Исходный код, который я использовал;Получите минимальную и максимальную дату из столбца в excel. C#

WB.Activate 
    DataInputRows = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows.Count 
    ActiveSheet.Range("S2:T" & Cells(Rows.Count, "A").End(xlUp).Row).NumberFormat = "dd/mm/yyyy" 
    ActiveSheet.Range("V2:V" & Cells(Rows.Count, "A").End(xlUp).Row).NumberFormat = "dd/mm/yyyy" 
    ActiveSheet.Range("A1:" & LastColumn & Cells(Rows.Count, "A").End(xlUp).Row).Sort _ 
     Key1:=Range("T1"), Header:=xlYes 

SYear = Format(WorksheetFunction.Min(Range("T1:T" & DataInputRows)), "dd/MM/yyyy") 
EYear = Format(WorksheetFunction.Max(Range("T1:T" & DataInputRows)), "dd/MM/yyyy") 

У меня есть сортировки и формат область покрытия, но я не могу совсем получить «SYear =» или «EYear =» немного прибит.

Кто-нибудь знает «простой» способ нахождения минимального и максимального значения из столбца?

Код, который я имею в C# до сих пор;

      DataInputRows = InputSheet.UsedRange.Rows.Count; 
         Excel.Range rng = (Excel.Range)OutputSheet.Cells[2, 19]; 
         rng.EntireColumn.NumberFormat = "dd/MM/yyyy"; 
         rng = (Excel.Range)OutputSheet.Cells[2, 20]; 
         rng.EntireColumn.NumberFormat = "dd/MM/yyyy"; 
         rng = (Excel.Range)OutputSheet.Cells[2, 22]; 
         rng.EntireColumn.NumberFormat = "dd/MM/yyyy"; 
         SourceRange.Sort(SourceRange.Columns[20, Type.Missing], 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); 

         var SYear = (This is where i need the minimum value of column T (20)) 

GOT IT !!

    DataInputRows = InputSheet.UsedRange.Rows.Count; 
        Excel.Range rng = (Excel.Range)InputSheet.Cells[2, 19]; 
        rng.EntireColumn.NumberFormat = "dd/MM/yyyy"; 
        rng = (Excel.Range)InputSheet.Cells[2, 20]; 
        rng.EntireColumn.NumberFormat = "dd/MM/yyyy"; 
        rng = (Excel.Range)InputSheet.Cells[2, 22]; 
        rng.EntireColumn.NumberFormat = "dd/MM/yyyy"; 
        SourceRange.Sort(SourceRange.Columns[20, Type.Missing], 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); 


        Excel.WorksheetFunction wsf = ObjApp.WorksheetFunction; 

        rng = (Excel.Range)InputSheet.Cells[2, 20]; 
        var SYear = wsf.Min(rng); 
        DateTime dt = DateTime.FromOADate(SYear); 
        MessageBox.Show(dt.ToString()); 

Спасибо Ральфу за прыжок.

+0

Вы должны использовать класс приложения excel в C#, а затем использовать тот же префикс, например, excel.application x, then x.activeworkbook? У вас есть код? Кроме того, может быть больше сообщений о удаче в C# –

+1

Что не так с использованием 'WorksheetFunction.Min (' и 'WorksheetFunction.Max (' или 'Application.Min (' и 'Application.Max ('? – Ralph

+0

Вы уверены, что обрабатывает данные в диапазоне как даты, а не строки? – iShaymus

ответ

1

Так что @Ralph заставил меня думать. Я был уверен, что это не должно быть так сложно, как кажется, и команды должны быть достаточно похожи. поэтому я немного погубил и нашел, где я ошибся (или, точнее, где я не собирался). отредактировал мой код, чтобы показать рабочий вариант в случае, если кому-то это понадобится в будущем, и + 1'd Ralph для удара в мозг. :)

DataInputRows = InputSheet.UsedRange.Rows.Count; 
       Excel.Range rng = (Excel.Range)InputSheet.Cells[2, 19]; 
       rng.EntireColumn.NumberFormat = "dd/MM/yyyy"; 
       rng = (Excel.Range)InputSheet.Cells[2, 20]; 
       rng.EntireColumn.NumberFormat = "dd/MM/yyyy"; 
       rng = (Excel.Range)InputSheet.Cells[2, 22]; 
       rng.EntireColumn.NumberFormat = "dd/MM/yyyy"; 
       SourceRange.Sort(SourceRange.Columns[20, Type.Missing], 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); 


       Excel.WorksheetFunction wsf = ObjApp.WorksheetFunction; 

       rng = (Excel.Range)InputSheet.Cells[2, 20]; 
       var SYear = wsf.Min(rng); 
       DateTime dt = DateTime.FromOADate(SYear); 
       MessageBox.Show(dt.ToString()); 
Смежные вопросы