回答
您可以使用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. 有沒有辦法將.xlsx(excel)格式錶轉換成.org(emacs)格式表?
- 4. 保存從datagridview的頭來excel?另存爲Excel 2007格式(.xlsx)?
- 5. 以(XLSX)格式將數據導出到Excel數據
- 6. 轉換數據表格式
- 7. 轉換XLSX到CSV沒有使用Excel
- 8. php excel到mysql。轉換xls和xlsx都
- 9. 如何轉換提到Excel格式所提到的表格式
- 10. 如何使用Softartisans ExcelWriter將Excel 2007 Open XML(* .xlsx)轉換爲傳統格式文件(* .xls,例如.Excel 97)
- 11. Excel 2007將導出的內存流數據轉換爲公式
- 12. 轉換Excel格式
- 13. 將多個Excel .xls文件轉換爲.xlsx格式
- 14. 數據表excel轉換
- 15. 將xlsx轉換爲JSON格式?
- 16. 在導出到Excel之前將數據轉換爲表格格式
- 17. 如何將pdf格式的marathi數據轉換爲excel格式
- 18. Microsoft Excel 2007日期轉換
- 19. 轉換XLSM到XLSX
- 20. Excel 2007 - 將列轉換爲日期格式ddmmyyyyhh24miss
- 21. 轉換SQL表到excel表格
- 22. 如何將mysql表格數據導出到excel 2007
- 23. 如何使用SSIS將數據導出到Excel 2007表格?
- 24. 轉換XML到數據集或Excel表格
- 25. VBA - 通過ADODB將Excel 2007電子表格連接到Access 2007數據庫
- 26. 如何在PHP中讀取excel數據(office 2007 xlsx)?
- 27. JXL支持excel 2007格式
- 28. 將excel數據轉換爲SQL表
- 29. 將Excel 2007 VBA轉換爲Excel 2003
- 30. 轉換數據串到日期格式
我做了確切的事情。但是當我創建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