NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。
App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="sql" connectionString="Data Source=.;Initial Catalog=DBLQBZ;Integrated Security=True;"/>
</connectionStrings>
</configuration>
*.sc
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
//using NPOI.HSSF.UserModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 数据的导入导出_Excel文件_
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string constr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
private void btnBrowse_Click(object sender, EventArgs e)
{
OpenFileDialog opd = new OpenFileDialog();
opd.Filter = "Excel 数据文件|*.xls";
opd.AddExtension = true;
opd.Title = "请选择Excel数据文件:";
opd.ShowDialog(this);
txtExcelPath.Text = opd.FileName;
} private void btnExport_Click(object sender, EventArgs e)
{
string sql = "select * from tblCusInfo";
using (SqlDataReader reader = this.ExportData(sql, null))
{
if (reader.HasRows)
{
using (FileStream fs = new FileStream(txtExcelPath.Text, FileMode.OpenOrCreate, FileAccess.Write))
{
//如果创建工作薄的时候指定了文件流,表示要打开一个Excel文件
//如果不指定文件流,则表示要创建一个新的工作薄(excel文件)
using (Workbook wb = new HSSFWorkbook())
{
Sheet sheet = wb.CreateSheet("Data");
Row name = sheet.CreateRow();
int fieldcount = reader.FieldCount;//列的数目
for (int i = ; i < fieldcount; i++)
{
name.CreateCell(i).SetCellValue(reader.GetName(i));//得到表列名
}
int rows = ;
while (reader.Read())
{
Row row = sheet.CreateRow(rows);
rows++;
for (int i = ; i < fieldcount; i++)//去除自动编号列
{
if (reader.IsDBNull(i))
{
row.CreateCell(i, CellType.BLANK);//空单元格
}
else
{//类型很多具体问题具体对待
string typename = reader.GetDataTypeName(i);//数据类型.ToString()
switch (typename)
{
case "int":
row.CreateCell(i, CellType.NUMERIC).SetCellValue(reader.GetInt32(i));
break;
case "bit":
row.CreateCell(i, CellType.BOOLEAN).SetCellValue(reader.GetBoolean(i));
break;
default:
row.CreateCell(i, CellType.STRING).SetCellValue(reader.GetString(i));
break;
}
}
}
}
wb.Write(fs);
}
MessageBox.Show("导出成功!");
}
}
}
} private void btnImport_Click(object sender, EventArgs e)
{
using (FileStream fs = File.OpenRead(txtExcelPath.Text))
{
using (Workbook wk = new HSSFWorkbook(fs))
{
string sql = "insert into tblCusInfo(姓名,手机,数量,固定电话,车号,车架号) values(@name,@mphone,@count,@phone,@carNum,@carStruNum);";
Sheet sheet = wk.GetSheetAt();
int len = sheet.LastRowNum;//这里行号是从0开始的,表格中实际上是1.2...
for (int i = ; i <= len; i++)//标题行省去
{
Row row = sheet.GetRow(i);
SqlParameter[] param = new SqlParameter[] {
new SqlParameter("@name",SqlDbType.NVarChar),
new SqlParameter("@mphone",SqlDbType.NVarChar),
new SqlParameter("@count",SqlDbType.Int),
new SqlParameter("@phone",SqlDbType.NVarChar),
new SqlParameter("@carNum",SqlDbType.NVarChar),
new SqlParameter("@carStruNum",SqlDbType.NVarChar)};
for (int j = ; j < row.LastCellNum; j++)
{
//Excel中空单元格不能用如下方法判断
//1.若单元格格式是:字符串类型
//会报错:未将对象引用设置到对象的实例。
/* string value = row.GetCell(j).ToString();
if (value != string.Empty)
{
param[j].Value = value;
}
//2.若单元格的格式是:数值类型
//空单元格被转换成:"";
if (row.GetCell(j)!=null)
{
string value = row.GetCell(j).ToString();
param[j].Value = value;
}*/
//最好的方法是判断类型
if (row.GetCell(j) != null && row.GetCell(j).CellType != CellType.BLANK)
{
string value = row.GetCell(j).ToString();
param[j].Value = value;
}
else
{
param[j].Value = DBNull.Value;
}
}
this.ImportData(sql, param);
}
}
MessageBox.Show("数据导入成功!");
}
} private SqlDataReader ExportData(string sql, SqlParameter[] param)
{
//这里用using链接会释放的
SqlConnection con = new SqlConnection(constr); using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (param != null)
{
cmd.Parameters.AddRange(param);
}
con.Open();
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
} } private int ImportData(string sql, SqlParameter[] param)
{
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (param != null)
{
cmd.Parameters.AddRange(param);
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}
}
}
Form.cs
namespace 数据的导入导出_Excel文件_
{
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null; /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
} #region Windows 窗体设计器生成的代码 /// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnBrowse = new System.Windows.Forms.Button();
this.lblExcelPath = new System.Windows.Forms.Label();
this.txtExcelPath = new System.Windows.Forms.TextBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.btnExport = new System.Windows.Forms.Button();
this.btnImport = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// btnBrowse
//
this.btnBrowse.Location = new System.Drawing.Point(, );
this.btnBrowse.Name = "btnBrowse";
this.btnBrowse.Size = new System.Drawing.Size(, );
this.btnBrowse.TabIndex = ;
this.btnBrowse.Text = "浏览...";
this.btnBrowse.UseVisualStyleBackColor = true;
this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
//
// lblExcelPath
//
this.lblExcelPath.AutoSize = true;
this.lblExcelPath.Location = new System.Drawing.Point(, );
this.lblExcelPath.Name = "lblExcelPath";
this.lblExcelPath.Size = new System.Drawing.Size(, );
this.lblExcelPath.TabIndex = ;
this.lblExcelPath.Text = "Excel文件路径:";
//
// txtExcelPath
//
this.txtExcelPath.Location = new System.Drawing.Point(, );
this.txtExcelPath.Name = "txtExcelPath";
this.txtExcelPath.Size = new System.Drawing.Size(, );
this.txtExcelPath.TabIndex = ;
//
// groupBox1
//
this.groupBox1.Controls.Add(this.lblExcelPath);
this.groupBox1.Controls.Add(this.txtExcelPath);
this.groupBox1.Controls.Add(this.btnBrowse);
this.groupBox1.Location = new System.Drawing.Point(, );
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(, );
this.groupBox1.TabIndex = ;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Excel文件路径选择";
//
// btnExport
//
this.btnExport.Location = new System.Drawing.Point(, );
this.btnExport.Name = "btnExport";
this.btnExport.Size = new System.Drawing.Size(, );
this.btnExport.TabIndex = ;
this.btnExport.Text = "数据导出";
this.btnExport.UseVisualStyleBackColor = true;
this.btnExport.Click += new System.EventHandler(this.btnExport_Click);
//
// btnImport
//
this.btnImport.Location = new System.Drawing.Point(, );
this.btnImport.Name = "btnImput";
this.btnImport.Size = new System.Drawing.Size(, );
this.btnImport.TabIndex = ;
this.btnImport.Text = "数据导入";
this.btnImport.UseVisualStyleBackColor = true;
this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(, );
this.Controls.Add(this.btnImport);
this.Controls.Add(this.btnExport);
this.Controls.Add(this.groupBox1);
this.Name = "Form1";
this.Text = "Form1";
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button btnBrowse;
private System.Windows.Forms.Label lblExcelPath;
private System.Windows.Forms.TextBox txtExcelPath;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Button btnExport;
private System.Windows.Forms.Button btnImport;
}
}
项目文件和NPOI***.dll文件和测试数据文件:http://pan.baidu.com/s/1c0d3N2K
NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。的更多相关文章
- ASP.NET Core 导入导出Excel xlsx 文件
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...
- 使用PHPExcel导入导出excel格式文件
使用PHPExcel导入导出excel格式文件 作者:zccst 因为导出使用较多,以下是导出实现过程. 第一步,将PHPExcel的源码拷贝到项目的lib下 文件包含:PHPExcel.ph ...
- 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
using System; using System.Collections.Generic; using System.Text; using System.IO; using NPOI.SS.Us ...
- winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
1.通过NUGET管理器下载nopi,在引入命令空间 using System; using System.Collections.Generic; using System.Text; using ...
- NPOI、MyXls、Aspose.Cells 导入导出Excel(转)
Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导s出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你 ...
- java poi导出EXCEL xls文件代码
String _currentPage = request.getParameter("currentPage"); Integer currentPage = 0; if(_cu ...
- java中使用poi导入导出excel文件_并自定义日期格式
Apache POI项目的使命是创造和保持java API操纵各种文件格式基于Office Open XML标准(OOXML)和微软的OLE复合文档格式(OLE2)2.总之,你可以读写Excel文件使 ...
- asp.net core web的导入导出excel功能
这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core ...
- C#用Infragistics 导入导出Excel(一)
最近项目中有数据的导入导出Excel的需求,这里做简单整理. 公司用的是Infragistics的产品,付费,不需要本地安装Office. 有需要的朋友可以下载 Infragistics.2013.2 ...
随机推荐
- Java实现 LeetCode 374 猜数字大小 II
375. 猜数字大小 II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜 ...
- SQL Server使用Offset/Fetch Next实现分页
T-SQL实现分页 ,查找指定范围内的数据 首先,正常的查询是这样的 使用分页后 select * from Products order by ProductID offset X rows fet ...
- Linux 文件特殊权限-Sticky BIT
SBIT粘着位作用 只对目录有效 普通用户对该目录拥有w和x权限,即普通用户可以在此目录有写权限 如果没有粘着位,普通拥有写权限,就可以删除目录下所有文件,包括其他用户创建的文件,一旦有粘着位,只有r ...
- K8S-PV和PVC的实践
一.什么是PV和PVC? PV的全称是Persistent Volume,翻译过来为持久化存储卷,是对底层的共享存储的一种抽象,PV由管理员进行创建和配置,主要含存储能力.访问模式.存储类型.回收策略 ...
- iOS -App主流框架UINavigationController && UITabBarController的简单使用
一个iOS app几乎没有由一个控制器组成,除非这个app非常简单. 当app中有多个控制器的时候,就需要对这些控制器进行管理,用1个控制器去管理其他多个控制器: 如图所示: ...
- 异步函数async await在wpf都做了什么?
首先我们来看一段控制台应用代码: class Program { static async Task Main(string[] args) { System.Console.WriteLine($& ...
- JPA 中 find() 和 getReference() 的区别
在查询的时候有两个方法:find()和getReference(),这两个方法的参数以及调用方式都相同.那么这两个方法有什么不一样的呢? find()称为 立即加载,顾名思义就是在调用的时候立即执行查 ...
- Magic Line【坐标点排序方法】
Magic Line 题目链接(传送门) 来源:牛客网 题目描述 There are always some problems that seem simple but is difficult to ...
- c常用函数-strchr和strrchr
strchr和strrchr strrchr函数用于查找指定字符在一个字符串中最后一次出现的位置,然后返回指向该位置的指针 strchr函数用于查找指定字符在一个字符串中第一次出现的位置,然后返回指向 ...
- maven项目快速搭建SSM框架(一)创建maven项目,SSM框架整合,Spring+Springmvc+Mybatis
首先了解服务器开发的三层架构,分配相应的任务,这样就能明确目标,根据相应的需求去编写相应的操作. 服务器开发,大致分为三层,分别是: 表现层 业务层 持久层 我们用到的框架分别是Spring+Spri ...