C#从我自己的XML文件创build一个excel文件

我编写了一个程序,从数据库中查询并创build一个包含查询结果的XML文件。 如何使包含xml文件中元素的macros启用excel文件?

这里是位于我的驱动器C的XML文件的简短示例:(我用XXXXreplace了一些部分)

<JobSvc environment="TEST" dateTo="6/22/2015" dateFrom="2015-06-15T00:00:00+08:00"> <process server="XXXX" type="XXXX" name="XXXX"> <processId duration="2421" eventTime="6/1/2015 11:41:26 AM" source="TEST SOURCE" num="3">PROCESS ID</processId> </process> </JobSvc> 

这是我从xml文件生成excel文件的尝试(我从互联网上获得它,不幸的是,它不起作用,但它也不会产生exception或错误,因为我的程序创build了exception日志..):

 public void xmlToExcel() { Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; DataSet ds = new DataSet(); XmlReader xmlFile; int i = 0; int j = 0; xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); xmlFile = XmlReader.Create(@"C:\PerformanceMonitorXML " + DateTime.Now.ToString("dd_MM_yyyy") + ".xml", 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(); } } xlWorkBook.SaveAs("C\\PerformanceMonitorExcel " + DateTime.Now.ToString("dd_MM_yyyy") + ".xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); releaseObject(xlApp); releaseObject(xlWorkBook); releaseObject(xlWorkSheet); } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; } finally { GC.Collect(); } } 

问题很可能是您的权限。 如果你想保存在C上,你必须以pipe理员权限运行VS。 还有一个保存为input错误。 另外我build议写入excel不是逐个单元格,而是在对象数组中。 下面的代码为我工作>

 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; 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(@"C:\example.xml", new XmlReaderSettings()); ds.ReadXml(xmlFile); object[,] objects = new object[ds.Tables[0].Rows.Count, ds.Tables[0].Columns.Count]; for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { for (int j = 0; j < ds.Tables[0].Columns.Count; j++) { objects[i, j] = ds.Tables[0].Rows[i][j].ToString(); } } Microsoft.Office.Interop.Excel.Range range = xlWorkSheet.get_Range("A1", "D3"); range.Value = objects; releaseObject(range); xlWorkBook.SaveAs("C:\\PerformanceMonitorExcel " + DateTime.Now.ToString("dd_MM_yyyy") + ".xls", 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); MessageBox.Show("finished"); 

示例xml是>

 <root> <JobSvc environment="TEST" dateTo="6/22/2015" dateFrom="2015-06-15T00:00:00+08:00"> <process server="XXXX" type="XXXX" name="XXXX"> <processId duration="2421" eventTime="6/1/2015 11:41:26 AM" source="TEST SOURCE" num="3">PROCESS ID</processId> </process> </JobSvc> <JobSvc environment="TEST" dateTo="6/23/2015" dateFrom="2015-06-15T00:00:00+08:00"> <process server="XXXX" type="XXXX" name="XXXX"> <processId duration="2421" eventTime="6/1/2015 11:41:26 AM" source="TEST SOURCE" num="3">PROCESS ID</processId> </process> </JobSvc> <JobSvc environment="TEST" dateTo="6/24/2015" dateFrom="2015-06-15T00:00:00+08:00"> <process server="XXXX" type="XXXX" name="XXXX"> <processId duration="2421" eventTime="6/1/2015 11:41:26 AM" source="TEST SOURCE" num="3">PROCESS ID</processId> </process> </JobSvc> </root> 

Br,Márton