Export danych do excel

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.

        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.

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)

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ć

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); 
} 
1

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

1

hej

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1