我该怎么在C#中使用Windows Forms将 DataTable
导出到Excel? DataTable
与 DataGridView
控件相关联。 我需要将 DataTable
的记录导出到Excel中。
我该怎么在C#中使用Windows Forms将 DataTable
导出到Excel? DataTable
与 DataGridView
控件相关联。 我需要将 DataTable
的记录导出到Excel中。
关于 tuncalik 的答案,非常棒,尤其是如果你想试着玩一下这段代码 :) 但它将我的日期以美国格式放入Excel中,即2014年3月2日在英国是02/03/2014,而在美国则是03/02/2014,月份在日期之前。我需要它采用英国格式,请问有什么好的想法吗?
我已经检查过它以英国格式存储在我的DataTable中,而且我的Excel设置为英国,但由于某种原因,当它制作Excel文档时,它认为它是美国的(这是因为微软是一家美国公司吗?)
我会尝试使用区域设置代码进行实验,但不确定要在哪里放置。尝试过,但没有效果。
p.s.
我不得不更改一行代码才能使它正常工作,如下所示添加一个“cast”
// single worksheet
Excel._Worksheet workSheet = (Excel._Worksheet)excelApp.ActiveSheet;
DateTime startDate = Convert.ToDateTime(myList[0].ToString());
string strStartDate = startDate.ToLongDateString();
DateTime endDate = Convert.ToDateTime(myList[myListTotalRows].ToString());
string strEndDate = endDate.ToLongDateString();
干杯。
虽然这是一个旧的帖子,但我想在这里分享我的代码。我写了一个小函数,将数据表写入到一个指定路径(位置)的新Excel工作表中。另外,你需要添加对Microsoft Excel 14.0库的引用。
我从这个线程中提取了一些关于如何将任何东西写入Excel的信息- 如何将数据写入Excel文件(.xlsx)。
我使用这个来推断如何编写数据表。
*注意,在catch语句中,我有一个errorhandler静态类引用(你可以忽略这些)。
using excel = Microsoft.Office.Interop.Excel;
using System.IO;
using System.Data;
using System.Runtime.InteropServices;
//class and namespace wrapper is not shown in this example
private void WriteToExcel(System.Data.DataTable dt, string location)
{
//instantiate excel objects (application, workbook, worksheets)
excel.Application XlObj = new excel.Application();
XlObj.Visible = false;
excel._Workbook WbObj = (excel.Workbook)(XlObj.Workbooks.Add(""));
excel._Worksheet WsObj = (excel.Worksheet)WbObj.ActiveSheet;
//run through datatable and assign cells to values of datatable
try
{
int row = 1; int col = 1;
foreach (DataColumn column in dt.Columns)
{
//adding columns
WsObj.Cells[row, col] = column.ColumnName;
col++;
}
//reset column and row variables
col = 1;
row++;
for (int i = 0; i < dt.Rows.Count; i++)
{
//adding data
foreach (var cell in dt.Rows[i].ItemArray)
{
WsObj.Cells[row, col] = cell;
col++;
}
col = 1;
row++;
}
WbObj.SaveAs(location);
}
catch (COMException x)
{
ErrorHandler.Handle(x);
}
catch (Exception ex)
{
ErrorHandler.Handle(ex);
}
finally
{
WbObj.Close();
}
}
SaveAs
行:
'XlObj.DisplayAlerts = false;
WbObj.SaveAs(location);
WbObj.Close();
XlObj.Quit();
Marshal.ReleaseComObject(WsObj);
Marshal.ReleaseComObject(WbObj);
Marshal.ReleaseComObject(XlObj);'要使用Marshal.ReleaseComObject
方法,请将using System.Runtime.InteropServices
程序集添加到您的项目中。 - GrammatonCleric导出Excel的简单方法是使用Microsoft CloseXml包。我编写了一个简单的函数,将查询结果导出为Excel表格(我为此而编写,但在进行微小更改后可用于Windows应用程序):
using ClosedXML.Excel;
...
public ActionResult ToExcel(List<Dictionary<string, string>> data, Dictionary<string, string> columnMap, string fileName, string sheetName)
{
var dtDataBuffer = new System.Data.DataTable("buffer");
foreach (string col in columnMap.Values)
{
dtDataBuffer.Columns.Add(col, typeof(string));
}
foreach (var row in data)
{
List<string> rowData = new List<string> { };
foreach (string col in columnMap.Keys)
{
rowData.Add(row[col]);
}
dtDataBuffer.Rows.Add(rowData.ToArray());
}
var memoryStream = new MemoryStream();
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add(dtDataBuffer, sheetName);
worksheet.Rows().Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
worksheet.Rows().Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
worksheet.Columns().AdjustToContents();
workbook.SaveAs(memoryStream);
}
return File(memoryStream.ToArray(), "application/vnd.ms-excel", fileName);
}
这是一个使用示例(实际上,我使用自己的类来运行查询并生成数据。您可以在此处找到Oracle和SQL Server):
public ActionResult myReportExport(){
var data=List<Dictionary<string, string>>(){
{{"Column1_Index","Column1_Value"},{"Column2_Index","Column2_Value"},...}
...
};
return ToExcel(data, new Dictionary<string, string> {
{ "Column1_Index", "Column1 Title" } ,
{ "Column2_Index", "Column2 Title" } ,
...
},
"myFileName.xlsx",
"my sheet name"
);
}