Export danych do excel

Export danych do excel
AM
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 2 lata
  • Postów:32
0

Witam.

Mam problem z exportem danych do excel z rozszerzeniem xlsx.

Dane z db mam już w kolekcji IEnumerable
i potrzebuje utworzyć nowy dokument excel z hederami wartościami z listy.

Kopiuj
        public void ExportExcel(int _documentId)
        {

            var myList = Db.odwołanieDoProceduryDbZwracającejListeobiektów(_documentId); //lista obiektów 

            Export.ToExcel(Response, myList, _documentId);
        }

        private class Export
        {
            public static void ToExcel(HttpResponseBase response, object myList, int id)
            {
                var grid = new System.Web.UI.WebControls.GridView
                {
                    DataSource = myList
                };
                grid.DataBind();
                response.ClearContent();
                response.Buffer = true;
                response.AddHeader("content-disposition", "attachment; filename=Kalkulacje" + id + ".xls"); // po zmienie na xlsx podmienić wartość poniżej
                response.ContentType = "application/vnd.ms-excel"; // application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                response.Charset = "";
                var sw = new StringWriter();
                //var esw = new ExtentedStringWriter(new StringBuilder(), new UTF8Encoding());
                var htw = new HtmlTextWriter(sw);

                grid.RenderControl(htw);
                response.Write(sw.ToString());
                response.End();
            }

        }

w powyższym przykładzie starałem się to zrobić ale za każdym razem przy próbie otworzenia w formacie xls wyskakuje alert o niewłaściwym rozszerzeniu ale po otworzeniu dostaję moje dane ale ze zmienionymi polskimi znakami.
Natomiast po podmianie na format xlsx pliku nie można otworzyć zupełnie.

Zależy mi, żeby metoda ta mogła być uniwersalna bez ręcznego ustawiania hederów.
Ale nie upieram się na tej formie rozwiązania problemu. Rozważałem też zastosowanie OleDb.

Z góry dziękuję za pomoc.

edytowany 1x, ostatnio: AdamAdam_MF
Undo
  • Rejestracja:ponad 4 lata
  • Ostatnio:3 dni
  • Postów:41
0

Polecam skorzystać z Telerika i generowanie Excela. Sam go używam już z 2 lata i nigdy nie miałem problemów wygenerowaniem pliku.
Fakt, zanim korzystałem z telerika szukałem różnych bibliotek w Nugecie i w sumie z każdą był jakiś problem (tak jak opisałeś : albo nie wyświetlało polskich znaków, albo problem z niewłaściwym rozszerzeniu)

AM
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 2 lata
  • Postów:32
0

@Undo:
A miałbyś jakiś przykładowy kod Tworzący nowego excela i wypełniający go listą obiektów?
Tak jak np w moim przykładzie kolekcji obiektów w IEnumerable(bądź jakąkolwiek inną)
Bo w dokumentacji Telerika widzę tylko przykłady otwierania już istniejącego pliku , ale może coś pominąłem.

I drugie pytanie czy to jest darmowa biblioteka?

na szybko to wydaje mi się najbliższe ale wole się upewnić

Kopiuj
Telerik.Windows.Documents.Spreadsheet.Model.Workbook workbook = new Telerik.Windows.Documents.Spreadsheet.Model.Workbook(); 
workbook.Worksheets.Add(); 
string fileName = "SampleFile.xlsx"; 
 
Telerik.Windows.Documents.Spreadsheet.FormatProviders.IWorkbookFormatProvider formatProvider = new Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.XlsxFormatProvider(); 
 
using (Stream output = new FileStream(fileName, FileMode.Create)) 
{ 
    formatProvider.Export(workbook, output); 
} 
edytowany 2x, ostatnio: AdamAdam_MF
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
1

Pobierz z nuget EPPlus (koniecznie w wersji 4.5.3.3) i skorzystaj z funkcji LoadFromCollection.

SI
  • Rejestracja:ponad 6 lat
  • Ostatnio:18 minut
  • Postów:106
1

hej

dobra jest też biblioteka closedXML.dll.. teraz już zapisuje to xlsx

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.