哎,好好的代码今天说来个实验,结果用的是office15 气死人了,网上最高office14.dll 文章转自2012年 QQ群:13615607 MR.Young
  protected void BtnLoad_Click(object sender, EventArgs e)
{
//dataDR datadr = new dataDR();
//datadr.delete("delete from dbo.yuepingjueyuerbiao");
string fileName = DateTime.Now.ToString("yyMMddhhmmss") + ".xls";
string path = Server.MapPath("~/upload/excel/") + fileName; FileUpload1.SaveAs(path);
if (path != null)
{
DataSet ds=loadSouce(path);
}
else
{
Response.Write("<script>alert('没有上传文件')</script>");
}
} protected void Button1_Click(object sender, EventArgs e)
{
CreateExcel(helps.GetDataTable("select * from tb_teacher"), "Test.xls");
}
  <div>

             <asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="BtnLoad" runat="server" Text="上传" OnClick="BtnLoad_Click" />

         </div>

         <asp:Button ID="Button1" runat="server" Text="下载" style="height: 21px" OnClick="Button1_Click" />
经过第二天想了以后,其实连接字符串什么都没有问题,最后得出来的结论是因为导出并非标准格式的excel,不行的粘贴一下即可

导入方法

  private DataSet loadSouce(string path)
{ //连接EXCEL数据源
//string strPath = this.getPath();
//string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=" + "\"" + "Excel 8.0;HDR=Yes;IMEX=1" + "\""; // string strConn = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source =" + path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
string strConn = "Provider = Microsoft.ACE.OLEDB.15.0;Data Source =" + path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
//此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)
//备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数据,"HDR=No;"正好与前面的相反。
// "IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。 OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); /*
如果用户把sheet表名改了就是报下面的错:
'sheet1$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。
如果可以动态获得Excel中各个sheet的名称能动态的选中返回哪个sheet的数据,
即使用户更改了名称也不怕,完全可以把所有sheet的名称列出来供用户选择:
下面就把解决问题的代码列出来,主要用到了OleDbConnection.GetOleDbSchemaTable()方法
*/ //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等
System.Data.DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串数组
string[] strTableNames = new string[dtSheetName.Rows.Count];
for (int k = ; k < dtSheetName.Rows.Count; k++)
{
strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
} //OleDbDataAdapter myCommand = null;
System.Data.DataTable dt = new System.Data.DataTable(); //从指定的表明查询数据,可先把所有表明列出来供用户选择
string strExcel = "select * from [" + strTableNames[] + "]"; OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn); DataSet myDataSet = new DataSet(); myCommand.Fill(myDataSet); return myDataSet;
}

导出方法

  private void CreateExcel(System.Data.DataTable dt, string fileName)
{
HttpResponse resp;
resp = Page.Response; resp.Buffer = true;
resp.ClearContent();
resp.ClearHeaders();
resp.Charset = "GB2312"; // resp.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
resp.ContentEncoding = System.Text.Encoding.Default;//设置输出流为简体中文
resp.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 string colHeaders = "", ls_item = ""; ////定义表对象与行对象,同时用DataSet对其值进行初始化
//DataTable dt = ds.Tables[0];
DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的 int i = ;
int cl = dt.Columns.Count; // colHeaders += "tttttttt" + "\n";
//取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
for (i = ; i < cl; i++)
{
if (i == (cl - ))//最后一列,加n
{
colHeaders += dt.Columns[i].Caption.ToString().Trim() + "\n";
}
else
{
colHeaders += dt.Columns[i].Caption.ToString().Trim() + "\t";
} }
resp.Write(colHeaders); //向HTTP输出流中写入取得的数据信息 //逐行处理数据
foreach (DataRow row in myRow)
{
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
for (i = ; i < cl; i++)
{
if (i == (cl - ))//最后一列,加n
{
ls_item += row[i].ToString().Trim() + "\n";
}
else
{
ls_item += row[i].ToString().Trim() + "\t";
} }
resp.Write(ls_item);
ls_item = ""; }
resp.End(); }

记得引用Micorosoft.office.Interop.Excel

最新文章

  1. 冒泡,setinterval,背景图的div绑定事件,匿名函数问题
  2. JAVA/Android Map与String的转换方法
  3. Python框架之Tornado(四)源码之褪去模板外衣
  4. Dev C++支持c++11标准的编译方法
  5. js 未结束的字符串常量错误解决方法
  6. 用Eclipse 开发Dynamic Web Project应用程序 【转】
  7. HDU 2187 A sequence of numbers
  8. mysql 分区表详解
  9. DataReader、Table、DataSet和Entity相互转化
  10. 状态压缩DP------学习小记
  11. 快速构建Windows 8风格应用20-MediaElement
  12. 用Bottle开发web程序(二)
  13. HDU 2544 最短路(初涉SPFA算法)
  14. TP5使用phpmailer实现邮件发送
  15. 前台序列化传过来的值,后台获取之后封装到map当中,让后在转化成json格式,最后在把json里面的参数里面的某一个值进行分割,最后在存到json格式的数据中去。
  16. android开发过程中遇到的坑
  17. 深入css布局篇(2) — 定位与浮动
  18. Oracle数据库表解锁语句
  19. Logstash 基础入门
  20. 7 Serial Configuration 理解 (一)

热门文章

  1. POJ2155 Matrix 二维线段树
  2. httpd2.4.27rpm包制作
  3. p1199八数码问题
  4. 学习html5 中的canvas(一)
  5. ap和路由器有什么区别 ap和路由器的区别介绍【图文】
  6. ASP.NET统计图表控件
  7. codeforces 673B B. Problems for Round(模拟)
  8. 洛谷P4316绿豆蛙的归宿——期望
  9. mac下载模块时报错OSError: [Errno 13] Permission denied: &#39;/Library/Python/2.7/site-packages/chardet&#39;
  10. pair运用