.net 读取Excel文件

1.需求
允许用户在客户段上传Excel文件,然后服务端完成对于Excel表格的读取和处理
2.问题及解决方法
2.1首先的问题是关于文件的上传问题,方法其实有两种
2.1.1 可以利用input标签,将type改为file,通过submit来想服务器上传文件
//占坑 亲测后补齐
2.1.2 更为简单的方法是利用asp.net的组件FileUpload,通过button处理后台读取

aspx
    <asp:FileUpload CssClass="button_right" ID="Dep_FileUpload" runat="server"/>
    <asp:Button ID="Button2" runat="server" Text="上传部门业绩考核文件" OnClick="Button2_Click"/>
aspx.cs
        string fileName = Dep_FileUpload.FileName;
        string sheetName = "Sheet1";
        string filePath = Server.MapPath("~/UploadFiles/");
        Dep_FileUpload.SaveAs(filePath + fileName);
        DataTable dt = ExcelToDataTable(filePath+fileName,sheetName);
aspx.cs
/// strExcelFileName 读取的文件储存位置
/// strSheetName  读取的sheet名 通常是Sheet1 
public DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
    {
        try
        {
            //源的定义
            //string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';";
            string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';";

            //Sql语句
            //string strExcel = string.Format("select * from [{0}$]", strSheetName); 这是一种方法
            string strExcel = "select * from   [" + strSheetName + "$]";

            //定义存放的数据表
            DataSet ds = new DataSet();

            //连接数据源
            OleDbConnection conn = new OleDbConnection(strConn);

            conn.Open();

            //适配到数据源
            OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
            adapter.Fill(ds, strSheetName);

            conn.Close();


            return ds.Tables[strSheetName];
        }
        catch (System.Exception ex)
        {
            Response.Write(ex); //用来查看异常原因
            return null;

        }

    }
2.2读取Excel时的参数设置
HDR
    若为 YES,则第一行是标题行(即列名称),不是数据;
    若为 NO,则第一行不是标题行,跟后面的行一样,是数据。
IMEX
    若为 0,则为输出模式,此情况下只能用作写入 Excel;
    若为 1,则为输入模式,此情况下只能用作读取 Excel,并且始终将 Excel 数据作为文本类型读取;
    若为 2,则为连接模式,此情况下既可用作写入、也可用作读取。
2.3  C# conn.open() 外部表不是预期的格式
    注意到上面代码对于源的定义其实其实有两种方式
    第一种只能操作.xls文件
    第二种则可以操作.xls与.xlsx文件
2.4 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序
    我遇到这个问题时通过安装了Microsoft.ACE.OLEDB.12.0驱动就解决了这个问题

下载连接
3.后续补充遇到的一些坑

3.1将Excel文件转成datatable一般不会将一些隐藏的错误显示出来,比如Excel表格可能在实际使用中多了一些空格,便经常会出现诸如“不存在列名**”,又或是“SQL语句没有正确结束”的错误,很浪费时间,同时解决的时候也不会有任何成就感,只会让人觉得沮丧。。。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值