iTrond.net

[aiTrond dått nett] --> .NET, seiling, roboter og annen morro!
Velkommen til iTrond.net Sign in | Join | Help
in Search

Trond

Office Open XML Format

Selv om vi applikasjonsutviklere ikke liker det, så er det nå engang slik at vi må forholde oss til Office-produktene. I ethvert prosjekt så dukker det opp et krav om at man skal kunne eksportere til Excel osv.

Når man da lager web applikasjoner, så krever det en server-side generering av office-dokumenter. Dette fører ofte til at man installerer Office på serveren, og bruker Ole-kall eller tilsvarende for å generere dokumentene. Det er mange grunner til at dette IKKE er noen god løsning(jeg overlater det til leseren som en øvelse å lukte frem hvorfor).


Men nå som Microsoft har valgt å lage en åpen standard basert på xml(Office Open XML Format) for sine officeprodukter så åpner det seg nye muligheter. Dette ligger som grunn i Office 2007, men ved å installere en konverter så er det bakoverkompatibelt med office 2003.


Jeg fant et fint bibiliotek som abstraherer ytterligere det å integrere mot Excel. Dette passet som hånd i hanske på det jeg skulle gjøre. Biblioteket heter ExcelPackage Open Xml.

Se hvor enkel koden ble: (og husk: ingen office på serveren!)

       

  Guid g = Guid.NewGuid();

        string filsti = HttpContext.Current.Server.MapPath("../../temp");

        string templateSti = HttpContext.Current.Server.MapPath("../../Maler/minmal.xlsx");

        FileInfo routerlistefil = new System.IO.FileInfo(filsti + @"\" + g.ToString() + ".xlsx");

        FileInfo template = new FileInfo(templateSti);

        using (ExcelPackage xlPackage = new ExcelPackage(routerlistefil, template))

        {

            ExcelWorksheet ewb = xlPackage.Workbook.Worksheets["Routerliste"];

            xlPackage.DebugMode = true;

            xlPackage.Workbook.CalcMode = ExcelCalcMode.Automatic;

           

            DataTable dt = minDAL.HentData(int id);

            int hStyle = ewb.Cell(rad, kolonneStart).StyleID;

            // overskrifter

            foreach (DataColumn dc in dt.Columns)

            {

                ewb.Cell(rad, hkolonne).StyleID = hStyle;

                ewb.Cell(rad, hkolonne).Value = dc.ColumnName;

                hkolonne++;

            }

            rad++;

            //innhold

            int iStyle = ewb.Cell(radStart + 1, kolonneStart).StyleID;

            foreach (DataRow dr in dt.Rows)

            {

                int kolonne = kolonneStart;

                foreach (DataColumn dc in dt.Columns)

                {

                    ewb.Cell(rad, kolonne).Value = " " + dr[dc].ToString();

                    ewb.Cell(rad, kolonne).StyleID = iStyle;

                    kolonne++;

                }

                rad++;

            }

            xlPackage.Save();

        }

        excelExpKlikkLabel.Visible = true;

        excelRapp.Visible = true;

        excelRapp.NavigateUrl = "~/temp/" + g.ToString() + ".xlsx";

       

Published 16. februar 2007 18:02 by Trond

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

Leave a Comment

(required) 
(optional)
(required) 
Submit
Powered by Community Server, by Telligent Systems