zoukankan      html  css  js  c++  java
  • c#操作EXCEL

    之前第一次操作Excel时,在网上找的代码直接贴了过来,当时只是能运行就行,并没有在意连接字符串里的属性
    所以在获取到的DataTable里反而没有列名,最后是自己在for循环里分别设置的,后来在网上找了文章,发现连
    接字符串中的HDR就是设置获取列名的
    参数HDR的值:
    HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES
    参数Excel 8.0 对于Excel 97以上到2003版本都用Excel 8.0,2007或2010的都用Extended Properties=Excel 12.0
    IMEX ( IMport EXport mode )设置
      IMEX 有三种模式:
      0 is Export mode
      1 is Import mode
      2 is Linked mode (full update capabilities)
      我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:
      当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
      当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
      当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
    意义如下:
    0 ---输出模式;
    1---输入模式;
    2----链接模式(完全更新能力)

    但是从中也学到了一些新的东西,比如如果当前表中不存在列名,则默认的列名是F1、F2这样依次往下的

    实际代码是:

    public static System.Data.DataTable ExcelToDataTable(string strExcelFileName)
            {
               
                //Application myExcel = new Application();
                //myExcel.Application.Workbooks.Open(strExcelFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); //this.txtFile.Text为Excel文件的全路径
                //Microsoft.Office.Interop.Excel.Workbook myBook = myExcel.Workbooks[1];
    
                ////获取第一个Sheet
                //Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)myBook.Sheets[1];
                //string strSheetName = sheet.Name; //Sheet名
    
                //源的定义
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
    
                
                //string strExcel = "select * from [sheet1$]";
    
                //定义存放的数据表
                DataSet ds = new DataSet();
    
                //连接数据源
                OleDbConnection conn = new OleDbConnection(strConn);
    
                conn.Open();
                DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
                string strSheetName = schemaTable.Rows[0][2].ToString().Trim();
    
                //Sql语句
                //string strExcel = string.Format("select * from [{0}$]", strSheetName); //这是一种方法
                string strExcel = string.Format("select * from [{0}]", strSheetName); //这是一种方法
                //适配到数据源
                OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
                adapter.Fill(ds, strSheetName);
                
                conn.Close();
                System.Data.DataTable dt = ds.Tables[strSheetName];
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    dt.Columns[i].ColumnName = dt.Rows[0]["F" + (i + 1).ToString()].ToString();
                }
    
                //myExcel.DisplayAlerts = false;
                //myBook.Close(Microsoft.Office.Interop.Excel.XlSaveAction.xlSaveChanges, Missing.Value, Missing.Value);
                //sheet = null;
                //myBook = null;
                //myExcel.Quit();
                //myExcel = null;
                //System.GC.Collect();
                return dt;
            }
  • 相关阅读:
    springmvc+mybatis多数据源切换
    Tomcat 8.5 配置自动从http跳转https
    Tomcat 8.5 配置 域名绑定
    本地测试Tomcat配置Https访问
    Spring boot
    解决IDEA16闪退的问题
    cef
    spring-boot学习资料
    oracle 表空间不足解决办法
    oracle导出表的办法
  • 原文地址:https://www.cnblogs.com/helloEveryBody/p/6140483.html
Copyright © 2011-2022 走看看