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

C#从我自己的XML文件创建一个excel文件,c#,xml,excel,C#,Xml,Excel,我编写了一个程序,从数据库中进行查询,并创建一个包含查询结果的xml文件。如何生成包含xml文件中元素的启用宏的excel文件 这是位于我的驱动器C上的xml文件的一个简短示例:(我用XXXX替换了一些部件) 进程ID 下面是我从xml文件生成excel文件的尝试(我是从internet获得的,不幸的是,它不起作用,但也不会产生异常或错误,因为我的程序会为异常创建日志..): public void xmlToExcel() { Excel.applicationxlapp; Excel.工

我编写了一个程序,从数据库中进行查询,并创建一个包含查询结果的xml文件。如何生成包含xml文件中元素的启用宏的excel文件

这是位于我的驱动器C上的xml文件的一个简短示例:(我用XXXX替换了一些部件)


进程ID
下面是我从xml文件生成excel文件的尝试(我是从internet获得的,不幸的是,它不起作用,但也不会产生异常或错误,因为我的程序会为异常创建日志..):

public void xmlToExcel()
{
Excel.applicationxlapp;
Excel.工作簿;
Excel工作表;
对象错误值=System.Reflection.Missing.Value;
数据集ds=新数据集();
XmlReader xmlFile;
int i=0;
int j=0;
xlApp=new Excel.Application();
xlWorkBook=xlApp.Workbooks.Add(错误值);
xlWorkSheet=(Excel.Worksheet)xlWorkBook.Worksheets.get_项(1);
xmlFile=XmlReader.Create(@“C:\PerformanceMonitorXML”+DateTime.Now.ToString(“dd_MM_yyyy”)+“.xml”,新的XmlReaderSettings());
ReadXml(xmlFile);

对于(i=0;i最有可能的问题是您的权限。如果您想在C上保存,您必须使用管理员权限运行VS。另一方面,“另存为”中存在键入错误。此外,我建议不要逐个单元格写入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");
Microsoft.Office.Interop.Excel.Application xlApp;
Microsoft.Office.Interop.Excel.工作簿;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
对象错误值=System.Reflection.Missing.Value;
数据集ds=新数据集();
XmlReader xmlFile;
xlApp=新的Microsoft.Office.Interop.Excel.Application();
xlWorkBook=xlApp.Workbooks.Add(错误值);
xlWorkSheet=(Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_项(1);
xmlFile=XmlReader.Create(@“C:\example.xml”,新的XmlReaderSettings());
ReadXml(xmlFile);
object[,]objects=新对象[ds.Tables[0].Rows.Count,ds.Tables[0].Columns.Count];
对于(int i=0;i
示例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>

进程ID
进程ID
进程ID

Br,Márton

最有可能的问题是您的权限。如果您想在C上保存,您必须使用管理员权限运行VS。另一方面,“另存为”中有一个输入错误。此外,我建议不要逐个单元格,而是在对象数组中写入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");
Microsoft.Office.Interop.Excel.Application xlApp;
Microsoft.Office.Interop.Excel.工作簿;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
对象错误值=System.Reflection.Missing.Value;
数据集ds=新数据集();
XmlReader xmlFile;
xlApp=新的Microsoft.Office.Interop.Excel.Application();
xlWorkBook=xlApp.Workbooks.Add(错误值);
xlWorkSheet=(Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_项(1);
xmlFile=XmlReader.Create(@“C:\example.xml”,新的XmlReaderSettings());
ReadXml(xmlFile);
object[,]objects=新对象[ds.Tables[0].Rows.Count,ds.Tables[0].Columns.Count];
对于(int i=0;i
示例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>

进程ID
进程ID
进程ID

Br,Márton

我遇到了这个异常:
System.IO.IOException:进程无法访问文件'C:\PerformanceMonitorXML 06_07_2015.xml',因为它正被另一个进程使用。
顺便说一句,我正在windows服务上运行此代码,而上面的异常是由我的日志创建者创建的……我没有打开文件,也没有打开“我不知道为什么会出现这种异常。当我打开任务管理器时,EXCEL.exe*32有多个实例,可能读取的凭据设置不正确?请尝试凭据部分设置。现在的问题不是EXCEL写入的原因。请关闭进程中的这些EXCEL。它们可能会锁定文件。如果某个地方出现异常,将有一个冻结的进程锁定文件。它给出了此错误
System.Runtime.InteropServices.comeException(0x800A03EC):在第59行(即另存为行)的HRESULT:0x800A03EC
异常。您的代码在您的电脑上工作了吗?WWI是如何获得此异常的:<