回答
您可以使用OLEDB数据提供程序,并将Excel作为另一个ADO.NET数据源,以循环访问DataTable行并将它们插入到Excel电子表格中。这里有一篇Microsoft知识库文章,详细介绍了许多细节。
http://support.microsoft.com/kb/316934/en-us
最重要的事情要记住的是,你可以在工作簿中创建工作簿和床单,您可以通过在名称末尾附加一个“$”引用现有的表。如果您在工作表名称末尾省略'$',则OLEDB提供者会认为它是一张新工作表并将尝试创建它。
继 工作表名称美元符号是 表中存在的指示。如果您正在创建 一个新表,如本文的 创建新工作簿和表 部分所述,请勿使用 美元符号。
您可以在2003(.xls)或2007格式(xlsx)中创建和电子表格,并在连接字符串中定义 - 指定要写入的文件,并指定延期。确保您使用正确的OLEDB提供程序版本。
如果你想创建一个2003(.xls的)版本,您可以使用此连接字符串:如果你想创建一个2007(.xlsx)格式版本
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties="Excel 8.0;HDR=YES
,您可以使用此连接字符串:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Book1.xlsx;Extended Properties="Excel 12.0;HDR=YES
您可能必须从Microsoft下载ACE提供程序才能创建XLSX文件。你可以找到它here。
我通常使用XLS提供程序,所以我没有使用XLSX提供程序。
希望这会有所帮助。如果您有其他问题,请告诉我。
在一些旧的代码,我不喜欢5年前应该努力找到这个......
public static void DataTableToExcel(DataTable tbl)
{
HttpContext context = HttpContext.Current;
context.Response.Clear();
foreach (DataColumn c in tbl.Columns)
{
context.Response.Write(c.ColumnName + ";");
}
context.Response.Write(Environment.NewLine);
foreach (DataRow r in tbl.Rows)
{
for (int i = 0; i < tbl.Columns.Count; i++)
{
context.Response.Write(r[i].ToString().Replace(";", string.Empty) + ";");
}
context.Response.Write(Environment.NewLine);
}
context.Response.ContentType = "text/csv";
context.Response.AppendHeader("Content-Disposition",
"attachment; filename=export.csv");
context.Response.End();
}
从ASP.NET这将输出与Excel 2007中可以打开CSV文件的响应。如果你愿意,你可以扩展名更改为模仿Excel和它应该只是通过更换以下行工作:
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AppendHeader("Content-Disposition",
"attachment; filename=export.xlsx");
一个CSV是最简单的方式,如果你不需要做任何事情复杂。如果您确实要求它是真正的本机格式的Excel 2007文件,则需要使用Office库来构建它或将其从CSV转换并提供/保存。
这个环节也可能是有用的:
How to avoid the Excel prompt window when exporting data to Excel 2007
@hey,我很tryn做同样的事情......但没有成功....可以ü答复马后....感谢我的问题(http://stackoverflow.com/questions/13737495/format-error-while-exporting-to-excel-from-gridview-in-asp-净) – Kulkarni 2012-12-07 04:52:44
你必须做大量的互操作的,这里是一个教程,希望它帮助。 link text
我后来为公司编写了以下代码。它需要Enumerable的任何类类型,并将其所有(get)属性导出到Excel中,并打开Excel。你应该可以为DataTable做类似的事情。记住,你需要添加引用的Microsoft.Office.Interop.Excel
public static void ExportToExcel<T>(IEnumerable<T> exportData)
{
Excel.ApplicationClass excel = new Excel.ApplicationClass();
Excel.Workbook workbook = excel.Application.Workbooks.Add(true);
PropertyInfo[] pInfos = typeof(T).GetProperties();
if (pInfos != null && pInfos.Count() > 0)
{
int iCol = 0;
int iRow = 0;
foreach (PropertyInfo eachPInfo in pInfos.Where(W => W.CanRead == true))
{
// Add column headings...
iCol++;
excel.Cells[1, iCol] = eachPInfo.Name;
}
foreach (T item in exportData)
{
iRow++;
// add each row's cell data...
iCol = 0;
foreach (PropertyInfo eachPInfo in pInfos.Where(W => W.CanRead == true))
{
iCol++;
excel.Cells[iRow + 1, iCol] = eachPInfo.GetValue(item, null);
}
}
// Global missing reference for objects we are not defining...
object missing = System.Reflection.Missing.Value;
// If wanting to Save the workbook...
string filePath = System.IO.Path.GetTempPath() + DateTime.Now.Ticks.ToString() + ".xlsm";
workbook.SaveAs(filePath, Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled, missing, missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
// If wanting to make Excel visible and activate the worksheet...
excel.Visible = true;
Excel.Worksheet worksheet = (Excel.Worksheet)excel.ActiveSheet;
excel.Rows.EntireRow.AutoFit();
excel.Columns.EntireColumn.AutoFit();
((Excel._Worksheet)worksheet).Activate();
}
}
我有一个数据表,我需要投入Excel 2007中的格式和 保存为Excel文件格式(.xlsx)2007年
任何人都可以帮助我实现这一目标吗?
您只需将我的免费C#类添加到您的项目和一行代码。
完整信息(包括提供免费下载的源代码,并举例项目)在这里:
Mikes Knowledge Base - Export to Excel
我的图书馆使用免费微软的OpenXML库(在我的下载也提供)写入文件,所以你不必使用重量级的VSTO库,或者在你的服务器上安装了Excel。
此外,它会创建一个实际 .xlsx文件,而不是其他一些将数据流写入逗号分隔文本文件的方法,但将其命名为.xls文件。
顺便说一句,我有负载的使用OLEDB,这不仅是因为我运行的是Windows 7 64位写入Excel文件困难,与Office 2007(这是32位)和Microsoft ACE提供商必须是的64位版本......但如果您安装了32位版本的Office,则无法安装此版本。
因此,您必须卸载Office,安装ACE驱动程序,然后重新安装Office。
但即使如此,我放弃使用OLEDB ..它只是不够稳定。
看到别人发布了“save to csv”选项。虽然这似乎并没有成为OP一直在寻找答案,这里是我的版本,其中包括该表的标题
public static String ToCsv(DataTable dt, bool addHeaders)
{
var sb = new StringBuilder();
//Add Header Header
if (addHeaders)
{
for (var x = 0; x < dt.Columns.Count; x++)
{
if (x != 0) sb.Append(",");
sb.Append(dt.Columns[x].ColumnName);
}
sb.AppendLine();
}
//Add Rows
foreach (DataRow row in dt.Rows)
{
for (var x = 0; x < dt.Columns.Count; x++)
{
if (x != 0) sb.Append(",");
sb.Append(row[dt.Columns[x]]);
}
sb.AppendLine();
}
return sb.ToString();
}
- 1. C#将Excel 2007(xlsx)文件转换为Excel 2003(xls)文件
- 2. 将.xlsx转换为.xlsm后,数组停止工作Excel 2007,
- 3. 保存从datagridview的头来excel?另存为Excel 2007格式(.xlsx)?
- 4. 将多个Excel .xls文件转换为.xlsx格式
- 5. Excel 2007将导出的内存流数据转换为公式
- 6. 将xlsx转换为JSON格式?
- 7. 在导出到Excel之前将数据转换为表格格式
- 8. 转换XML到数据集或Excel表格
- 9. 如何使用SSIS将数据导出到Excel 2007表格?
- 10. 如何在PHP中读取excel数据(office 2007 xlsx)?
- 11. 如何JSP表导出到Excel(XLSX格式)
- 12. 将sql ce表转换为.xls或.xlsx格式
- 13. 如何将Excel表格转换为Trac Wiki表格格式?
- 14. 转换JSON数据到HTML表格
- 15. 将Excel xlsx转换为Java中的xls
- 16. Excel将SpreadsheetML转换为开放XML(XLSX)
- 17. 无法将CSV转换为Excel(XLSX)
- 18. Excel宏将xlsx转换为xls
- 19. 使用Java将Excel(.xlsx)转换为PDF
- 20. PHP阅读xlsx Excel 2007文件
- 21. Python:写入Excel 2007+文件(.xlsx文件)
- 22. 转换JSON到数据表
- 23. Excel数据转换
- 24. 在Excel中提取数据并在另一个表格中转换/格式化
- 25. 如何在CakePHP中将mysql表格数据转换为Excel或CSV格式?
- 26. 从Excel数据转换
- 27. 将表格数据转换为Excel中的垂直列表
- 28. excel公式或宏自动将长格式数据转换为宽格式
- 29. 如何将数据从Excel 2007 xlsx文件导入SQL Server 2000数据库?
- 30. 将QuickReport导出为Excel xlsx格式
我做了确切的事情。但是当我创建XLSX文件时,它创建了,但是当我尝试打开它时,它显示文件已损坏。我该怎么办。我遵循了您提供的Above MS链接中的相同步骤 – smilu 2013-01-13 07:59:52
请注意,它将使用列中前5到8个值来“猜测”其数据类型。然后它会将任何不符合的值设置为NULL。即如果您的电话号码为:004412345677,00443777373,[...此处有多个号码...],+44(22)3883774747,[...还有一些电话号码与以下值加号和括号...]等 - 所有这些非数字电话号码很可能会被放在您的结果文件为NULL。解决这个设计缺陷的一种方法需要调整注册表。其他选项可能使用OpenXML SDK 2.5 - 从微软免费下载。 – demp 2013-02-18 12:32:45