首先,我们来建一个数据库,我们就叫Hello.db(不一定是db后缀,你可以sqlite,sqlite3,db3)都可以作为识别,然后往里面建一个空的表格,如下图所示

然后建一个Excel表格,往表格里面写入一些数据,我这里只是Demo形式,可以根据自己的实际情况,稍作修改

然后开始建一个新的项目,我这里用的是WPF,你可以使用Core,Console,Winform都可以,我这里提供思路,仅供参考

然后引用一下图中的dll程序集,主要是SQLite和NPOI,你可以到Nuget去下载,Nuget命令,都可以达到目的,请随意

然后我们来写一下用户界面的代码

  1. <Grid>
  2. <Button Content="ExcelToSQLite"
  3. Height=""
  4. Width=""
  5. Name="Import"
  6. Click="Import_Click"/>
  7. </Grid>

再来看看后端的代码如下图

  1. //数据库连接
  2. SQLiteConnection SQLiteConnections;
  3. public MainWindow()
  4. {
  5. InitializeComponent();
  6. SQLiteConnections = new SQLiteConnection("Data Source=Hello.db;Version=3;");
  7. SQLiteConnections.Open();
  8. }

然后写一下Button的事件

  1. private void Import_Click(object sender, RoutedEventArgs e)
  2. {
  3. OpenFileDialog openfiledialog = new OpenFileDialog();
  4. openfiledialog.Filter = "*.xls|*.xls|*.xlsx|*.xlsx";
  5. if (openfiledialog.ShowDialog() == true)
  6. {
  7. string name = openfiledialog.FileName;
  8. ImportExcel(name);
  9. }
  10. }

再下来写NPOI读取Excel的方法,然后再Button 事件里面调用即可,你也可以自己封装一下代码

  1. public DataTable ImportExcel(string filePath)
  2. {
  3. DataTable dt = new DataTable();
  4. using (FileStream fsRead = System.IO.File.OpenRead(filePath))
  5. {
  6. IWorkbook wk = null;
  7. //获取后缀名
  8. string extension = filePath.Substring(filePath.LastIndexOf(".")).ToString().ToLower();
  9. //判断是否是excel文件
  10. if (extension == ".xlsx" || extension == ".xls")
  11. {
  12. //判断excel的版本
  13. if (extension == ".xlsx")
  14. {
  15. wk = new XSSFWorkbook(fsRead);
  16. }
  17. else
  18. {
  19. wk = new HSSFWorkbook(fsRead);
  20. }
  21. //获取第一个sheet
  22. ISheet sheet = wk.GetSheetAt();
  23. //获取第一行
  24. IRow headrow = sheet.GetRow();
  25. //创建列
  26. for (int i = headrow.FirstCellNum; i < headrow.Cells.Count; i++)
  27. {
  28. DataColumn datacolum = new DataColumn("F" + (i + ));
  29. dt.Columns.Add(datacolum);
  30. }
  31. //读取每行,从第二行起
  32. for (int r = ; r <= sheet.LastRowNum; r++)
  33. {
  34. bool result = false;
  35. DataRow dr = dt.NewRow();
  36. //获取当前行
  37. IRow row = sheet.GetRow(r);
  38. //读取每列
  39. for (int j = ; j < row.Cells.Count; j++)
  40. {
  41. ICell cell = row.GetCell(j); //一个单元格
  42. dr[j] = GetCellValue(cell); //获取单元格的值
  43. //全为空则不取
  44. if (dr[j].ToString() != "")
  45. {
  46. result = true;
  47. }
  48. }
  49. if (result == true)
  50. {
  51. dt.Rows.Add(dr); //把每行追加到DataTable
  52. }
  53. }
  54. }
  55.  
  56. }
  57. int a = dt.Rows.Count;
  58. int b = dt.Columns.Count;
  59. for (int i = ; i < dt.Rows.Count; i++)
  60. {
  61. string c = dt.Rows[][].ToString();
  62. string sql = "insert into Student (Name,Class,Age,Sex) values('" + dt.Rows[i][].ToString() + "','" + dt.Rows[i][].ToString() + "','" + dt.Rows[i][].ToString() + "','" + dt.Rows[i][].ToString() + "')";
  63. SQLiteCommand command = new SQLiteCommand(sql, SQLiteConnections);
  64. command.ExecuteNonQuery();
  65. }
  66. MessageBox.Show("导入成功");
  67. return dt;
  68. }

在下来我们来检查一下每个表格的数据方法,如下图

  1. private static string GetCellValue(ICell cell)
  2. {
  3. if (cell == null)
  4. return string.Empty;
  5. switch (cell.CellType)
  6. {
  7. case CellType.Blank: //空数据类型 这里类型注意一下,不同版本NPOI大小写可能不一样,有的版本是Blank(首字母大写)
  8. return string.Empty;
  9. case CellType.Boolean: //bool类型
  10. return cell.BooleanCellValue.ToString();
  11. case CellType.Error:
  12. return cell.ErrorCellValue.ToString();
  13. case CellType.Numeric: //数字类型
  14. if (HSSFDateUtil.IsCellDateFormatted(cell))//日期类型
  15. {
  16. return cell.DateCellValue.ToString();
  17. }
  18. else //其它数字
  19. {
  20. return cell.NumericCellValue.ToString();
  21. }
  22. case CellType.Unknown: //无法识别类型
  23. default: //默认类型
  24. return cell.ToString();//
  25. case CellType.String: //string 类型
  26. return cell.StringCellValue;
  27. case CellType.Formula: //带公式类型
  28. try
  29. {
  30. HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
  31. e.EvaluateInCell(cell);
  32. return cell.ToString();
  33. }
  34. catch
  35. {
  36. return cell.NumericCellValue.ToString();
  37. }
  38. }
  39. }

到这里我们的代码就写完了,我们来运行一下,看看效果怎么样

选择我们事先写好的Excel表格,选择它,然后点击打开的按钮

有提示成功了。

你以为到这里就结束了吗?不是的,这是程序提示成功了而已,那我们去看看SQLite数据看看有没有数据,记得开始的时候我们的SQLite是没有数据的,现在我们打开看看

到现在为止,整个流程就结束了,因为Excel的数据完全的导入到了SQLite数据库中,我们的目的达到了。感谢您的欣赏!

使用NPOI读取Excel数据并写入SQLite的更多相关文章

  1. 使用NPOI读取Excel数据到DataTable

    如今XML文件的存储格式大行其道,可是也不是适用于全部情况,非常多单位的数据交换还是使用Excel的形式.这就使得我们须要读取Excel内的数据.载入到程序中进行处理.可是如何有效率的读取,如何使程序 ...

  2. NPOI读取Excel数据应用

    NPOI 是 POI 项目的 .NET 版本.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它 ...

  3. NPOI读取Excel 数据 转。。。

      public DataTable am_Decode() { DataTable table = new DataTable(); string[] strAscDataList = Direct ...

  4. NPOI读取Excel遇到的坑

    NPOI是POI的.NET版本.POI是用Java写成的库,能帮助用户在没有安装Office环境下读取Office2003-2007文件.NPOI在.NET环境下使用,能读写Excel/Word文件. ...

  5. NPOI操作excel之读取excel数据

    NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.  一.下载引用 去NPOI官网http://npoi.codeplex. ...

  6. Java POI读取Excel数据,将数据写入到Excel表格

    1.准备 首先需要导入poi相应的jar包,包括: 下载地址:http://pan.baidu.com/s/1bpoxdz5 所需要的包的所在位置包括: 2.读取Excel数据代码 package S ...

  7. python 的两个模块xlwt,xlrd,写入和读取Excel数据

    http://www.cnblogs.com/fireme/p/3887284.html 这上面写的很全,不过我只需要简单的读和写的操作就ok了,下面是我写的读和写入Excel操作 读取Excel数据 ...

  8. Python用xlrd读取Excel数据到list中再用xlwt把数据写入到新的Excel中

    一.先用xlrd读取Excel数据到list列表中(存入列表中的数据如下图所示) import xlrd as xd #导入需要的包 import xlwt data =xd.open_workboo ...

  9. 使用NPOI读取Excel表格内容并进行修改

    前言 网上使用NPOI读取Excel文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/restran/p/38894 ...

随机推荐

  1. luogu P2661 信息传递 x

    P2661 信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知 ...

  2. wannafly 练习赛10 E 数列查找(莫队+分块分块分块......)

    链接:https://www.nowcoder.net/acm/contest/58/E 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit ...

  3. [LeetCode]-DataBase-Rising Temperature

    Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to ...

  4. React Native商城项目实战06 - 设置安卓中的启动页

    1.Main 目录下新建LaunchImage.js: /** * 启动页 */ import React, { Component } from 'react'; import { AppRegis ...

  5. jvm内存模型学习心得

    昨天面试了两家,备受打击,问的多的就是jvm内存,然额真的是一头雾水.工作中用到的真是少之又少,面试还得问道, 今天恶补了下,在此作以下总结: jvm分为5部分 1.程序计数器 jvm支持多线程运行, ...

  6. python-接口开发flask模块(三)开发登陆接口

    #写一个login的接口,实现的功能是输入用户名和密码,如果数据库中有该用户,那么就去redis中插入 登陆产生的sign值插入redis中有效时间600s import flask import t ...

  7. Python基本语法_文件操作_读写函数详解

    目录 目录 软件环境 file文件对象 open文件操作 读文件 read读取所有文件内容 readline获取一行内容 readlines读取所有文件内容 readreadlinereadlines ...

  8. android 程序的运行步骤(备忘)

    java代码: public class HelloWorld { public static void main(String[] args) { System.out.println(" ...

  9. visual studio 在windows远程调试 linux 程序 cout 输出乱码

    转载:https://www.cnblogs.com/findumars/p/6627255.html 反正是解决了. 以gcc为例,它有三个命令选项:-finput-charset=gb18030- ...

  10. 在linux服务器上自动备份数据库

    脚本如下,没有任何问题: # !/usr/bin/pythonimport osimport timeimport datetimeimport pipesimport glob DB_HOST = ...