zoukankan      html  css  js  c++  java
  • 导入Excel文件

    选择文件

     1 #region
     2 //获取路径
     3 string FilePath = "";
     4 //选择文件
     5 OpenFileDialog openFileDialog1 = new OpenFileDialog();
     6 //获取本地启动路径
     7 string str = System.Windows.Forms.Application.StartupPath;
     8 openFileDialog1.InitialDirectory = str + "\";
     9 openFileDialog1.Filter = "所有文件(*.*)|*.*";
    10 openFileDialog1.RestoreDirectory = false;
    11 if (openFileDialog1.ShowDialog() == DialogResult.OK)
    12 FilePath = openFileDialog1.FileName;
    13 //获得文件的扩展名
    14 string IsXls = System.IO.Path.GetExtension(FilePath).ToString().ToLower();
    15 if (!FilePath.Equals(""))
    16 {
    17 if (IsXls == ".xlsx" || IsXls == ".xls")
    18 {
    19 //调用方法
    20 方法名(FilePath);
    21 }
    22 else
    23 {
    24 MessageBox.Show("只可以选择Excel格式文件,请重新选择文件!");
    25 return;
    26 }
    27 }
    28 #endregion
    View Code

    读取excel到datatable

     1 #region 读取excel到datatable
     2 public static DataTable ExcelToDataTable(string FilePath)
     3 {
     4 DataTable dtExcel = new DataTable();
     5 try
     6 {
     7 if (RCExportExcel.isOfficeInstall("11.0") || RCExportExcel.isOfficeInstall("12.0")
     8 || RCExportExcel.isOfficeInstall("14.0") || RCExportExcel.isOfficeInstall("15.0"))
     9 {
    10 #region 安装Office
    11 dtExcel = OfficeExcel(FilePath);
    12 #endregion
    13 }
    14 else
    15 {
    16 #region 未安装Office
    17 dtExcel = NpoiExcel(FilePath);
    18 #endregion
    19 }
    20 }
    21 catch (Exception ex)
    22 {
    23 WriteLog(ex.Message + ",错误行号:" + ex.StackTrace);
    24 MessageBox.Show("Excel文件被占用,请关闭Excel文件再进行导入操作!");
    25 }
    26 return dtExcel;
    27 }
    28 #endregion
    View Code

    Office读取Excel

     1 #region Office读取Excel
     2 /// <param name="excelPath">excel地址</param>
     3 /// <returns>成功返回datatable,失败返回null</returns>
     4 public static DataTable OfficeExcel(string excelPath)
     5 {
     6 DataTable dtexcel = new DataTable();
     7 string strConn;
     8 try
     9 {
    10 FileInfo fileInfo = new FileInfo(excelPath);//判断文件是否存在
    11 if (fileInfo.Exists)
    12 {
    13 strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties='Excel
    14 12.0;HDR=Yes;IMEX=1;'";
    15 OleDbConnection conn = new OleDbConnection(strConn);
    16 conn.Open();
    17 DataTable tbNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //得到所有工作簿名称
    18 string tbName = tbNames.Rows[0]["TABLE_NAME"].ToString();
    19 OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + tbName + "]", conn);
    20 DataSet ds = new DataSet(); //必须要使用DataSet对象
    21 oda.Fill(ds, "tempExport");
    22 dtexcel = ds.Tables[0];
    23 conn.Close();
    24 }
    25 }
    26 catch (Exception e)
    27 {
    28 WriteLog(e.Message + ",错误行号:" + e.StackTrace);
    29 MessageBox.Show("Excel文件被占用,请关闭Excel文件再进行导入操作!");
    30 return dtexcel;
    31 }
    32 finally
    33 {
    34 //释放资源
    35 if (dtexcel != null) { dtexcel.Dispose(); }
    36 }
    37 return dtexcel;
    38 }
    39 #endregion
    View Code

    NPOI 读取Excel

     1 #region NPOI 读取Excel
     2 /// <param name="excelPath">excel地址</param>
     3 /// <returns>成功返回datatable,失败返回null</returns>
     4 public static DataTable NpoiExcel(string excelPath)
     5 {
     6 IWorkbook workbook = null;//全局workbook
     7 ISheet sheet;//sheet
     8 DataTable table = null;
     9 try
    10 {
    11 FileInfo fileInfo = new FileInfo(excelPath);//判断文件是否存在
    12 if (fileInfo.Exists)
    13 {
    14 FileStream fileStream = fileInfo.OpenRead();//打开文件,得到文件流
    15 switch (fileInfo.Extension)
    16 {
    17 //xls是03,用HSSFWorkbook打开,.xlsx是07或者10用XSSFWorkbook打开
    18 case ".xls":
    19 workbook = new HSSFWorkbook(fileStream); break;
    20 case ".xlsx":
    21 workbook = new XSSFWorkbook(fileStream); break;
    22 default: break;
    23 }
    24 fileStream.Close();//关闭文件流
    25 }
    26 if (workbook != null)
    27 {
    28 sheet = workbook.GetSheetAt(0);//读取到指定的sheet
    29 table = new DataTable();//初始化一个table
    30 
    31 IRow headerRow = sheet.GetRow(0);//获取第一行,一般为表头
    32 int cellCount = headerRow.LastCellNum;//得到列数
    33 
    34 for (int i = headerRow.FirstCellNum; i < cellCount; i++)
    35 {
    36 DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);//初始化table的列
    37 table.Columns.Add(column);
    38 }
    39 //遍历读取cell
    40 for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
    41 {
    42 NPOI.SS.UserModel.IRow row = sheet.GetRow(i);//得到一行
    43 DataRow dataRow = table.NewRow();//新建一个行
    44 
    45 for (int j = row.FirstCellNum; j < cellCount; j++)
    46 {
    47 ICell cell = row.GetCell(j);//得到cell
    48 if (cell == null)//如果cell为null,则赋值为空
    49 {
    50 dataRow[j] = "";
    51 }
    52 else
    53 {
    54 dataRow[j] = row.GetCell(j).ToString();//否则赋值
    55 }
    56 }
    57 
    58 table.Rows.Add(dataRow);//把行 加入到table中
    59 
    60 }
    61 }
    62 return table;
    63 
    64 }
    65 catch (Exception e)
    66 {
    67 WriteLog(e.Message + ",错误行号:" + e.StackTrace);
    68 MessageBox.Show("Excel文件被占用,请关闭Excel文件再进行导入操作!");
    69 return table;
    70 }
    71 finally
    72 {
    73 //释放资源
    74 if (table != null) { table.Dispose(); }
    75 workbook = null;
    76 sheet = null;
    77 }
    78 }
    79 #endregion
    View Code

     验证身份证号,得到出生日期,性别

     1 #region 验证身份证号,得到出生日期,性别
     2 public static void AuthenticationIdcard(string idcard)
     3 {
     4 try
     5 {
     6 DateTime birthday = new DateTime();
     7 string sex = string.Empty;
     8 bool id = true;
     9 if (!Regex.IsMatch(idcard, @"^(^d{15}$|^d{18}$|^d{17}(d|X|x))$", RegexOptions.IgnoreCase))
    10 {
    11 id = false;
    12 }
    13 if (id)
    14 {
    15 if (idcard.Length == 18)
    16 {
    17 birthday = DateTime.Parse(idcard.Substring(6, 8).Insert(6, "-").Insert(4, "-"));
    18 sex = idcard.Substring(14, 3);
    19 if (int.Parse(sex) % 2 == 0)//性别代码为偶数是女性奇数为男性
    20 sex = "";
    21 else
    22 sex = "";
    23 }
    24 else if (idcard.Length == 15)
    25 {
    26 string a = "19";
    27 birthday = DateTime.Parse(a + idcard.Substring(6, 6).Insert(4, "-").Insert(2, "-"));
    28 string tmp = idcard.Substring(idcard.Length - 3);
    29 int sx = int.Parse(tmp);
    30 int outNum;
    31 Math.DivRem(sx, 2, out outNum);
    32 if (outNum == 0)
    33 sex = "";
    34 else
    35 sex = "";
    36 DataRow row = dtRightIdcard.NewRow();
    37 row["身份证号"] = idcard;
    38 row["出生日期"] = birthday;
    39 row["性别"] = sex;
    40 row["nationid"] = "01";
    41 dtRightIdcard.Rows.Add(row);
    42 }
    43 else if (idcard.Length == 12)
    44 {
    45 birthday = DateTime.Parse("1950-01-01");
    46 sex = "";
    47 DataRow row = dtRightIdcard.NewRow();
    48 row["身份证号"] = idcard;
    49 row["出生日期"] = birthday;
    50 row["性别"] = sex;
    51 row["nationid"] = "01";
    52 dtRightIdcard.Rows.Add(row);
    53 }
    54 }
    55 catch
    56 {
    57 
    58 throw;
    59 }
    60 }
    61 #endregion
    View Code

    转载请注明出入来源:https://www.cnblogs.com/famhuai/p/8257279.html

  • 相关阅读:
    angular 写 文字省略显示指令
    REACT 学习之一:普通表单过滤
    怎么能够做到实时的邮件监听-- 求指点
    C++实现Behavioral
    private virtual in c++
    接口污染
    C++ 虚函数&纯虚函数&抽象类&接口&虚基类(转)
    c++ override 关键字
    virtual function c++
    删完垃圾代码2
  • 原文地址:https://www.cnblogs.com/famhuai/p/8257279.html
Copyright © 2011-2022 走看看