我在c#中有一些数据,我想把这些数据放到Excel中。我认为最简单的方法是将其导出为XML,因为Excel会读取xml文件。
最简单的方法是什么?我不知道xml需要什么格式才能让Excel读取它。我想要一个简单的数据表(标题,数据和总计,尽管我可以简单地在c#中生成总数而不是excel)。
如果不使用xml,可能还有更好的方法,但最简单的是最好的,绝对没有第三方的东西......
想法?
答案 0 :(得分:2)
最简单的方法是将数据转储为CSV格式,然后使用Excel打开它!
这可能需要10行Python代码。
我相信你可以解决这个问题:
答案 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;