C# .xml to .xlsx how?

16,528

Solution 1

Try the Below code in which i converted XML into DataSet and later exported DataSet into Excel

        DataSet ds = new DataSet();

        //Convert the XML into Dataset
        ds.ReadXml(@"E:\movie.xml");

        //Retrieve the table fron Dataset
        DataTable dt = ds.Tables[0];

        // Create an Excel object
        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

        //Create workbook object
        string str = @"E:\test.xlsx";
        Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Open(Filename: str);

        //Create worksheet object
        Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.ActiveSheet;

        // Column Headings
        int iColumn = 0;

        foreach (DataColumn c in dt.Columns)
        {
            iColumn++;
            excel.Cells[1, iColumn] = c.ColumnName;
        }

        // Row Data
        int iRow = worksheet.UsedRange.Rows.Count - 1;

        foreach (DataRow dr in dt.Rows)
        {
            iRow++;

            // Row's Cell Data
            iColumn = 0;
            foreach (DataColumn c in dt.Columns)
            {
                iColumn++;
                excel.Cells[iRow + 1, iColumn] = dr[c.ColumnName];
            }
        }

        ((Microsoft.Office.Interop.Excel._Worksheet)worksheet).Activate();

        //Save the workbook
        workbook.Save();

        //Close the Workbook
        workbook.Close();

        // Finally Quit the Application
        ((Microsoft.Office.Interop.Excel._Application)excel).Quit();

Solution 2

A far more simpler solution: use data sources in Excel.

  1. Create a "template" Xslx that matches your need.
  2. For each xml data files, add a data connection to the xml file.
  3. Set up, if you want, the data connection to refresh each time the file is opened.

This works out-of-the box, with no code at all (excluding of course the xml generation).

Optionally, you may publish your Xml through an ASP.Net application (dynamically or not), and set up the data connection to gather the data from this asp.net app.

Solution 3

You will need to read the schema for the XLSX file format and write an XSLT file to transform your custom XML file.

.NET has very good XML support so something like this should be fairly trivial, it will be actual mapping from your XML format to XSLT where the real effort is needed.

Share:
16,528
Fridolin
Author by

Fridolin

Updated on July 01, 2022

Comments

  • Fridolin
    Fridolin almost 2 years

    I want to convert a complete XML file to XLSX but I'm not sure how I can do it. I searched at Google for a Solutions but the most time I only find the way into the other direction for example XLSX to XML. On the Microsoft Page I found a xmlconvertclass, but I'm not sure how I can work with the class.

    Did someone do something like this in the past and can help me?

  • Fridolin
    Fridolin almost 11 years
    Easiest way for me was: Open it with Excel and save as .xlsx but the Problem is, sometimes i have more than 1 XML and have the repeat the These steps... i want a one click solution for this ://
  • Steve B
    Steve B almost 11 years
    Surround my steps with "for each xml source". This will still be valid. The template is generated once. Only the xml data is dynamic.
  • Fridolin
    Fridolin almost 11 years
    wow, create class. And the class is working but i get only the first row and first column, why?
  • Gun
    Gun almost 11 years
    This should work for all rows. can you check the DataTable is filled properly or not by debugging?
  • Fridolin
    Fridolin almost 11 years
    Is filled with the first Row and Column, hms. But i have 30 Columns and 5 rows at the test XML.
  • Gun
    Gun almost 11 years
    Can you post your XML?
  • Fridolin
    Fridolin almost 11 years
    I dont know, how i can post data files here... :/?
  • Gun
    Gun almost 11 years
    Edit your question and append your XML format to your question
  • Fridolin
    Fridolin almost 11 years
    didnt found the append function here is the link dateiupload.net/…
  • Gun
    Gun almost 11 years
    you are getting more than 1 table from dataset so you are supposed to loop all data tables
  • Fridolin
    Fridolin almost 11 years
    Hey thanks for this, it works better than the first one but i have one Problem, when Row 1 and 2 have same Content in a column it doesnt Show the Information in the next row/column...
  • Fridolin
    Fridolin over 10 years
    No solution finally? :/