2010-01-07 6 views
1

J'ai des données dans C#, et je veux mettre ces données dans Excel. Je pense que la façon la plus simple est de l'exporter en XML puisque Excel lit les fichiers xml.Comment puis-je créer une table lisible dans Excel? C#

Quelle est la manière la plus facile de faire cela? Je ne sais pas dans quel format le xml doit être dans Excel pour le lire. Je veux un simple tableau de données (en-têtes, données et totaux, bien que les totaux que je peux simplement générer en C# plutôt qu'excel le font).

Il pourrait aussi y avoir une meilleure façon sans utiliser xml, mais est plus simple meilleur et certainement pas de choses 3ème partie ...

Idées?

Répondre

1

Il y a une belle intro à http://www.codeproject.com/KB/office/excelxmlspreadsheet.aspx qui devrait vous aider à commencer à écrire des feuilles de calcul XML de base.

Vous pouvez reconsidérer en utilisant des outils tiers; il y en a quelques-unes sympas avec de bonnes licences qui vous faciliteront la vie.

J'ai précédemment utilisé http://www.carlosag.net/Tools/ExcelXmlWriter/ pour écrire des données simples dans une feuille de calcul Excel. Il sort directement dans le format Excel Excel que vous mentionnez.

J'ai également eu du succès en utilisant Apache POI HSSF, mais pas son incarnation la plus récente (il manquait le support Office 2007 à ce moment). Vous pouvez utiliser IKVM pour recompiler la bibliothèque Java dans une bibliothèque .NET, et vous êtes prêt à partir.

+0

J'ai trouvé comment écrire des documents xml pour pouvoir les mettre en forme. Il y a une si petite quantité de documentation sur le sujet mais j'ai pensé assez pour produire une très belle table formatée. – NibblyPig

1

Une approche alternative si vos besoins sont basiques: vous pouvez le mettre en HTML avec une table représentant votre feuille de calcul et simplement nommer votre fichier html .xls. De cette façon, vous n'avez pas à vous soucier de ce qu'une virgule vous réserve et vous pouvez également fournir un niveau de formatage de base.

1

J'ai dû faire des choses semblables dans le passé. Le moyen le plus simple que j'ai trouvé pour le faire est d'exporter directement à partir de mon application pour exceler:

Microsoft.Office.Interop.Excel

Renseignez une base de données, une grille de données, un jeu de données, etc. et éliminez les résultats et les exportez vers Excel. Le exmaple ci-dessous est en VB, mais peut être facilement modifié pour vos besoins et utilise un ensemble de données:

Public Sub ExcelExport(ByVal objDataSet As System.Data.DataSet) 

     Try 
      Dim l_ofd As New SaveFileDialog 

      l_ofd.Filter = "Microsoft 2007 Excel File (*.xls)|*.xls" 

      If (l_ofd.ShowDialog = System.Windows.Forms.DialogResult.OK) Then 
       If (objDataSet.Tables.Count > 0) Then 

        Dim myExcel As ApplicationClass = New ApplicationClass() 

        myExcel.Visible = _ShowWorkBook 

        Dim wb1 As Workbook = myExcel.Workbooks.Add("") 

        Dim ws1 As Worksheet = CType(wb1.Worksheets.Add, Microsoft.Office.Interop.Excel.Worksheet) 

        ws1.Name = _WorkSheetName 

        For indx As Integer = 0 To objDataSet.Tables(_DataSetName).Columns.Count - 1 
         ws1.Cells(1, indx + 1) = objDataSet.Tables(_DataSetName).Columns.Item(indx).ToString 
        Next 

        Dim rowID As Integer = 2 
        Dim dr As DataRow 
        For Each dr In objDataSet.Tables(_DataSetName).Rows 
         Dim colID As Integer = 1 
         Dim data As Object 
         For Each data In dr.ItemArray 
          ws1.Cells(rowID, colID) = data.ToString() 
          colID += 1 
         Next 
         rowID += 1 
        Next 

        Dim fileName As String = l_ofd.FileName 

        wb1.SaveAs(fileName) 
        wb1.Close() 

        myExcel.Workbooks.Close() 
        myExcel.Quit() 

        System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel) 
        System.Runtime.InteropServices.Marshal.ReleaseComObject(ws1) 
        System.Runtime.InteropServices.Marshal.ReleaseComObject(wb1) 

        ws1 = Nothing 
        wb1 = Nothing 
        myExcel = Nothing 
       Else 
        MessageBox.Show("No data present to export") 
       End If 
      End If 
     Catch ex As Exception 
      MessageBox.Show(ex.Message.ToString()) 
     End Try 

    End Sub 
0

si vous avez un DataTable, je viens d'écrire un code pour le transférer vers Excel. D'abord, vous avez besoin d'une référence Excel.

 //Just a test DataTable 
     System.Data.DataTable table = new System.Data.DataTable(); 
     table.Columns.AddRange(new DataColumn[] { new DataColumn("Col1"),new DataColumn("Col2") }); 
     table.Rows.Add("row1col1", "row1col2"); 
     table.Rows.Add("row2col1", "row2col2"); 

     //create Excel Application 
     Microsoft.Office.Interop.Excel.ApplicationClass s = new ApplicationClass(); 
     Workbook w = s.Workbooks.Add(""); //create new Workbook 
     Worksheet ws = w.ActiveSheet as Worksheet; //get active sheet. 

     //COPY COLUMN HEADERS 
     int startCol = 1; 
     int startRow = 1; 
     foreach (DataColumn col in table.Columns) 
     { 
      //copy columns in the first row 
      ((Range)ws.Cells[startRow, startCol]).Value2 = col.ColumnName; 
      startCol++; 
     } 

     //COPY ROWS 
     startRow = 2; //start 2nd row 
     foreach (DataRow row in table.Rows) 
     { 
      startCol = 1; 
      foreach (DataColumn col in table.Columns) 
      { 
       ((Range)ws.Cells[startRow, startCol]).Value2 = row[col].ToString(); 
       startCol++; 
      } 
      startRow++; 
     } 

     //start EXCEL 
     s.Visible = true; 
+0

Et vous avez besoin d'exceller sur la machine. C'est parfaitement ok pour le client. OP n'a pas indiqué si c'était côté serveur ou non. Je resterais loin de ce côté serveur si cela va être appelé régulièrement car le processus Excel va inévitablement causer des problèmes. Été là, fait cela. –

+0

@Jim, yep OP a posé une question simple, je lui ai montré du code ... peut-être quelqu'un d'autre va bénéficier de ce code tel quel. –

1

Voici un article qui présente une autre approche à l'aide du SDK OpenXML 2.0:

http://openxmldeveloper.org/articles/7937.aspx

Il démontre l'utilisation de ExtremeML - une bibliothèque d'extension de code managé 100% qui simplifie grandement la création programmatique Contenu Excel à partir de langages .NET. Le tutorial series couvre un large éventail de scénarios. Désistement: Je suis le créateur d'ExtremeML.

Questions connexes