我需要打开一个现有的Excel 文件,并用 DataTable 填充它。 我怎么能这样做?
我在ASP.NET
工作我已经尝试使用此解决方案创建一个Excel(http://stackoverflow.com/questions/1746701/export-datatable-to-excel-file) 然后我尝试用这样的OLEDB连接打开它,但它没有用..它说表格格式不正确..然后它说ir找不到ISAM文件..我不知道该怎么做..
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\reports\report.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1""");
conn.Open();
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = @"SELECT * INTO [Excel 8.0;Database=C:\reports\reportBase.xls].[SheetBase1] FROM Sheet1]";
cmd.ExecuteNonQuery();
conn.Close();
请帮帮我!!我很绝望!!
谢谢!
答案 0 :(得分:4)
如果您对第三方Excel .NET库感兴趣,可以打开现有的Excel文件,并使用带有GemBox.Spreadsheet Excel C# / VB.NET库的DataTable填充它。
以下是Excel ASP.NET示例如何打开现有Excel文件,使用DataTable填充它并将其流式传输到浏览器:
DataTable people = (DataTable)Session["people"];
// Open excel file and insert data table.
ExcelFile ef = new ExcelFile();
ef.LoadXls(Server.MapPath("MyData.xls"));
ExcelWorksheet ws = ef.Worksheets[0];
ws.InsertDataTable(people, "A1", true);
Response.Clear();
// Stream file to browser, in required type.
switch (this.RadioButtonList1.SelectedValue)
{
case "XLS":
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=" +
"Report.xls");
ef.SaveXls(Response.OutputStream);
break;
case "XLSX":
Response.ContentType = "application/vnd.openxmlformats";
Response.AddHeader("Content-Disposition", "attachment; filename=" +
"Report.xlsx");
// With XLSX it is a bit more complicated as MS Packaging API
// can't write directly to Response.OutputStream.
// Therefore we use temporary MemoryStream.
MemoryStream ms = new MemoryStream();
ef.SaveXlsx(ms)
ms.WriteTo(Response.OutputStream);
break;
}
Response.End();
答案 1 :(得分:1)
你可以使用这个解决方案....只有在你的数据进入数据表之后......
protected void Button1_Click(object sender, EventArgs e)
{
DataTable dtRecords = new DataTable();
dtRecords.Columns.Add("FIRSTNAME");
dtRecords.Columns.Add("LASTNAME");
dtRecords.Columns.Add("JOB");
DataRow rw1 = dtRecords.NewRow();
rw1[0] = "JHON";
rw1[1] = "SMITH";
rw1[2] = "MANAGER";
dtRecords.Rows.Add(rw1);
DataRow rw2 = dtRecords.NewRow();
rw2[0] = "MICH";
rw2[1] = "KEN";
rw2[2] = "SR MANAGER";
dtRecords.Rows.Add(rw2);
UploadDataTableToExcel(dtRecords);
}
protected void UploadDataTableToExcel(DataTable dtRecords)
{
string XlsPath = Server.MapPath(@"~/Add_data/test.xls");
string attachment = string.Empty;
if (XlsPath.IndexOf("\\") != -1)
{
string[] strFileName = XlsPath.Split(new char[] { '\\' });
attachment = "attachment; filename=" + strFileName[strFileName.Length - 1];
}
else
attachment = "attachment; filename=" + XlsPath;
try
{
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/vnd.ms-excel";
string tab = string.Empty;
foreach (DataColumn datacol in dtRecords.Columns)
{
Response.Write(tab + datacol.ColumnName);
tab = "\t";
}
Response.Write("\n");
foreach (DataRow dr in dtRecords.Rows)
{
tab = "";
for (int j = 0; j < dtRecords.Columns.Count; j++)
{
Response.Write(tab + Convert.ToString(dr[j]));
tab = "\t";
}
Response.Write("\n");
}
Response.End();
}
catch (Exception ex)
{
//Response.Write(ex.Message);
}
}
答案 2 :(得分:1)
如果您对第三方Excel .NET库感兴趣,可以打开现有的Excel文件,并使用带有GemBox.Spreadsheet Excel C#/ VB.NET库的DataTable填充它。
或者,如果您不想要在许可证上花费480美元,您可以完全免费下载我的导出到Excel C#类。
它使用OpenXML库创建一个真正的Excel 2007文件,您只需指定一个文件名,并调用“CreateExcelDocument”函数。
DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);
您可以从DataSet,DataTable或List&lt;&gt;创建Excel文件。
我的网页上提供了完全免费的所有源代码,以及说明和演示项目:
http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm
甚至还有一些示例代码,显示如何在ASP.Net应用程序中创建Excel文件,然后打开它。
祝你好运!答案 3 :(得分:0)
我使用这个belove代码得到了准确的结果.....
这可能对你有帮助..
try
{
if (dt == null || dt.Columns.Count == 0)
{
throw new Exception("ExportToExcel: Null or empty input table!\n");
}
string Filepath = "E:Sample\\Form.xlsx";
string SheetName = "Elnath - 3000";
// Microsoft.Office.Interop.Excel.Application xlApp;
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
Microsoft.Office.Interop.Excel._Worksheet xlWorkSheet;
// Microsoft.Office.Interop.Excel.Range xlRange = null;
object misValue = Type.Missing;
Excel.Application xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(Filepath);
// xlWorkBook = xlApp.Workbooks.Open(Filepath, misValue, false, misValue, misValue, misValue, true, misValue, misValue, misValue, misValue, misValue, false, misValue, misValue);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Sheets[SheetName];
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.ActiveSheet;
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Sheets.get_Item(SheetName);
xlWorkSheet.Activate();
// object StartRange = "B";
// object EndRange = misValue;
// xlRange = xlWorkSheet.get_Range("A", "M");
// xlRange = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.get_Range(StartRange, misValue);
//Header
//for (i = 0; i < dt.Columns.Count; i++)
//{
// xlRange.Cells[1, i + 1] = dt.Columns[i].ColumnName;
//}
//Datas
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
xlApp.Cells[i + 13, j + 1] = dt.Rows[i][j].ToString();
}
}
if (Filepath != null || Filepath != "")
{
try
{
xlApp.ActiveWorkbook.SaveAs(Filepath);
xlApp.Quit();
xlWorkSheet = null;
xlWorkBook = null;
xlApp = null;
}
catch (Exception ex)
{
throw new Exception("Can not save file" + ex.Message);
}
}
else
{
xlApp.Visible = true;
}
return dt;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}