在不久前,才使用asp的winform做了一个小型项目。其中就有遇到这个问题。如何把表格里的数据导入到Excel里,一开始想的是把gridview里的内容直接导入到Excel里,后来发现效果并不理想。后来发现直接导入dataset里的数据更好。我也借鉴了很多资料,发现都存在有部分的问题。所以希望写这个博客给后来者减少一点弯路,提供一些帮助。同时感谢大象大象你的鼻子怎么这么长给与我的帮助!
话不多说,先上截图。
表格数据截图
表格是使用asp的gridview控件搭配sqldatasource控件写的,样式用的是bootstrap。
导入Excel效果截图
把后台dataset查询到的数据都导出到Excel里
查询数据的代码
private OleDbConnection conn = null;
private OleDbCommand cmd = null;
private OleDbDataAdapter da;
static DataSet datasetF = new DataSet();
static int RecordIndex;
private string sql;
public void QueryData1(string sqlstr)
{
conn = new OleDbConnection();
conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + Server.MapPath("db\\manager1.mdb");
conn.Open();
da = new OleDbDataAdapter(sqlstr, conn);
datasetF.Clear();
DataSet datasetX = new DataSet();
datasetX.Clear();
da.Fill(datasetX, "QryData");
datasetF = datasetX.Copy();
GridView1.DataSource = datasetX;
Session["yuangong"] = GridView1.DataSource;
GridView1.DataSourceID = null;
GridView1.DataBind();
conn.Close();
}
导出到Excel的代码
public bool DataSetToExcel(DataSet dataSet, bool isShowExcle)
//dataset是上面存放数据的dataset,isShowExcel表示导出后是否自动打开Excel
{
DataTable dataTable = dataSet.Tables[0];
int rowNumber = dataTable.Rows.Count;
int columnNumber = dataTable.Columns.Count;
if (rowNumber == 0)
{
return false;
}
//建立Excel对象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
excel.Application.Workbooks.Add(true);
excel.Visible = isShowExcle;//是否打开该Excel文件
//填充数据
for (int c = 0; c < rowNumber; c++)
{
for (int j = 0; j < columnNumber; j++)
{
excel.Cells[c + 1, j + 1] = dataTable.Rows[c].ItemArray[j];
}
}
return true;
}
关于使用Microsoft.Office.Interop.Excel.Application类会报红的解决
之所以会报红,是因为项目中没有这个类的引用。按照下面的步骤添加引用即可。
1、在项目中找到引用,选择添加引用。
2、在COM中,找到Microsoft.Office.Excel的引用进行添加