0

In my application I have an xml file.i want to export the xml into Excel file in xls format.My problem is is while exporting headers are missing.Please find the code below.

private string ExportTestDatatoExcel(string testDataPath)
    {
        Microsoft.Office.Interop.Excel.Application xlApp;
        Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
        Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;

        DataSet ds = new DataSet();
        XmlReader xmlFile;
        int i = 0;
        int j = 0;

        xlApp = new Microsoft.Office.Interop.Excel.Application();
        xlWorkBook = xlApp.Workbooks.Add(misValue);
        xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        xmlFile = XmlReader.Create(testDataPath, new XmlReaderSettings());
        ds.ReadXml(xmlFile);

        for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
        {
            for (j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
            {
                xlWorkSheet.Cells[i + 1, j + 1] = ds.Tables[0].Rows[i].ItemArray[j].ToString();
            }
        }
        string fileName = Path.GetFileNameWithoutExtension(testDataPath);
        fileName += ".xls" ;
        xlWorkBook.SaveAs(Path.GetFullPath(fileName), Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, 
            misValue, misValue, misValue, misValue, 
            Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();

        releaseObject(xlApp);
        releaseObject(xlWorkBook);
        releaseObject(xlWorkSheet);
        return Path.GetFullPath(fileName);
    }

    private void releaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
        }
        finally
        {
            GC.Collect();
        }
    }

Please help me.

2 Answers 2

1

Your code is writing out the data as expected.

Just before your for loop you need to add another for loop to add the column headers in the first row of the sheet.

for(int k = 0; k < ds.Tables[0].Columns.Count - 1; k++)
{
    xlWorkSheet.Cells[1, k + 1] = ds.Tables[0].Columns[k].ColumnName;
}

then in our outter for loop you need to initialize i = 1 to account for the header row.

Sign up to request clarification or add additional context in comments.

Comments

0

Thanks Barry for the reference.It should work when the loop is as follows

for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
    for (j = 0; j <= ds.Tables[0].Columns.Count-1; j++)
    {
        for (int k = 0; k < ds.Tables[0].Columns.Count; k++)
        {                        
            xlWorkSheet.Cells[1, k + 1] = ds.Tables[0].Columns[k].ColumnName;   
        }
        xlWorkSheet.Cells[i + 2, j + 1] = ds.Tables[0].Rows[i].ItemArray[j].ToString();
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.