2016-07-05 9 views
0

私のアプリケーションでは、xml file.iを持っています。xlsをxls形式のExcelファイルにエクスポートしたいのですが、エクスポートするヘッダが見つからないという問題があります。 。C#でExcelにXMLをエクスポートする際にヘッダが見つからない

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

私を助けてください。

答えて

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

は、私たちのoutter forループの中で、あなたはヘッダー行を考慮して i = 1を初期化する必要があります。

+0

を次のようにループがあるときreference.Itのおかげでバリーが動作するはずです。 –

0

残念ながら働いていないその
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(); } }

関連する問題