如何在excel中创建可读的表? C#

时间:2010-01-07 16:14:27

标签: c# excel

我在c#中有一些数据,我想把这些数据放到Excel中。我认为最简单的方法是将其导出为XML,因为Excel会读取xml文件。

最简单的方法是什么?我不知道xml需要什么格式才能让Excel读取它。我想要一个简单的数据表(标题,数据和总计,尽管我可以简单地在c#中生成总数而不是excel)。

如果不使用xml,可能还有更好的方法,但最简单的是最好的,绝对没有第三方的东西.​​.....

想法?

8 个答案:

答案 0 :(得分:2)

最简单的方法是将数据转储为CSV格式,然后使用Excel打开它!

这可能需要10行Python代码。

我相信你可以解决这个问题:

http://en.wikipedia.org/wiki/Comma-separated_values

答案 1 :(得分:1)

This article解释了如何在Excel 2003中打开操作XML数据,以及this video explains the same for 2007

或者,正如lpthnc建议的那样,您可以将数据导出为CSV,Excel可以处理无问题。

答案 2 :(得分:1)

如果您希望在Windows环境中人机阅读与机器可读之间做出妥协,请编写CSV阅读器编写器

也加载到Excel中。

这里有一个讨论:

http://knab.ws/blog/index.php?/archives/3-CSV-file-parser-and-writer-in-C-Part-1.html

这是一篇C#文章而不是C文章。

答案 3 :(得分:1)

http://www.codeproject.com/KB/office/excelxmlspreadsheet.aspx有一个很好的介绍,可以让你开始编写基本的XML电子表格。

您可能想重新考虑使用第三方工具;有一些很好的许可证,可以让你的生活更轻松。

我之前使用http://www.carlosag.net/Tools/ExcelXmlWriter/将简单数据写入Excel电子表格。它会直接输出到您提到的Excel XML格式。

我使用Apache POI HSSF也取得了成功,虽然不是最近的版本(当时缺乏Office 2007支持)。您可以使用IKVM将Java库重新编译为.NET库,然后就可以了。

答案 4 :(得分:1)

如果您的需求是基本的,则可以采用另一种方法:您可以将其放入HTML中,并使用表格表示您的电子表格,然后将您的html文件命名为.xls。这样你就不必担心逗号会对你做什么,也可以提供基本的格式化。

答案 5 :(得分:1)

我过去不得不做类似的事情。我发现这样做的最简单方法是直接从我的应用程序导出到excel:

的Microsoft.Office.Interop.Excel

填充数据表,数据网格,数据集等,并迭代结果并输出到excel。下面的例子是在VB中,但可以根据您的目的轻松更改并使用数据集:

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

答案 6 :(得分:1)

这篇文章介绍了使用OpenXML SDK 2.0的另一种方法:

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

它演示了ExtremeML的使用 - 一个100%托管的代码扩展库,极大地简化了从.NET语言编程创建Excel内容的过程。 tutorial series涵盖了广泛的场景。

免责声明:我是ExtremeML的创建者。

答案 7 :(得分:0)

如果您有DataTable,我只需编写一些代码将其传输到Excel。首先,您需要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;