在C#中将XML导出到Excel时缺少标题

时间:2016-07-05 07:36:21

标签: c# excel

在我的应用程序中,我有一个xml文件。我希望以xls格式将xml导出到Excel文件中。我的问题是导出标题丢失时。请找到下面的代码。

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

请帮帮我。

2 个答案:

答案 0 :(得分:1)

您的代码正在按预期写出数据。

for循环之前,您需要添加另一个for循环,以便在工作表的第一行添加列标题。

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

然后在我们的for循环中,您需要初始化i = 1以考虑标题行。

答案 1 :(得分:0)

感谢Barry的参考。当循环如下时,它应该工作 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(); } }