C#学习-处理Excel
首先先了解下一个Excel文件的组成
1.一个Excel包含多个工作表(Sheet)
2.一个工作表(Sheet)包含多行(Row)
3.一行(Row)包含多个单元格(Cell)
如何判断一个单元格中的数据是数字类型,还是字符串类型?
|
字符串在左边,数值类型在右边 如果单元格式string类型,则用ToString() |


工具准备:
两个程序集NOPI.dll和Ionic.Zip.dll
对以上程序集的介绍
描述工作簿的类型:IWorkbook(接口),HSSFWorkbook(具体实现类)
描述工作表的类型:ISheet(接口),HSSFSheet(具体实现类)
1.读取Excel中文件
Student.xls文件如下

输出结果如下

代码
private void ReadExcel( )
{
//1.将Excel读到文件流中
using (FileStream fsRead=File.OpenRead("Student.xls"))
{
//2.根据文件流,创建一个工作簿对象(workbook)
IWorkbook wk=new HSSFWorkbook(fsRead);
//3.读取工作簿中的工作表
for (int i = 0; i < wk.NumberOfSheets; i++)
{
//3.1根据索引,获取一个工作表
ISheet sheet = wk.GetSheetAt(i);
//3.2输出工作表的名称
Console.WriteLine("====={0}=====",sheet.SheetName);
//4.遍历工作表每一行的数据
for (int r= 0; r <=sheet.LastRowNum; r++)
{
//获取当前行
IRow row = sheet.GetRow(r);
//5.遍历一行中的每一个单元格,当这一行为空时,row会返回null
if (row!=null)
{
//遍历一行的每一个单元格
for (int c = 0; c < row.LastCellNum; c++)
{
//创建单元格对象
ICell cell = row.GetCell(c);
//如果单元格未使用,则为null
if (cell!=null)
{
Console.Write(cell.ToString()+"\t");
}
}
}
Console.WriteLine();
}
}
}
}
2.写入Excel
private void WriteExcel( )
{
List<Person>listPersons=new List<Person>()
{
new Person(){Name="张三 1",Age=11,Gender='男'},
new Person(){Name="张三 2",Age=21,Gender='女'},
new Person(){Name="张三 3",Age=31,Gender='男'},
new Person(){Name="张三 4",Age=41,Gender='女'}
};
//1.创建Workbook对象
IWorkbook wk=new HSSFWorkbook();
//2.创建工作表对象
ISheet sheet = wk.CreateSheet("Persons");
//3.向工作表中添加行
for (int i = 0; i <= listPersons.Count-1; i++)
{
IRow row = sheet.CreateRow(i);
row.CreateCell(0).SetCellValue(listPersons[i].Name);
row.CreateCell(1).SetCellValue(listPersons[i].Age);
row.CreateCell(2).SetCellValue(listPersons[i].Gender.ToString());
}
using (FileStream writer=File.OpenWrite("Persons.xls"))
{
wk.Write(writer);
}
Console.WriteLine("ok");
}
查看Excel文件

3.表中数据读到Excel
数据库中列的类型
其中Age为int类型,而且为可空类型


代码
private void TableToExcel( )
{
//1.读取数据
string strSql = "select * from Persons";
using (SqlDataReader reader=SQLHelper.ExecuteReader(strSql,CommandType.Text))
{
if (reader.HasRows)
{
IWorkbook wk=new HSSFWorkbook();
ISheet sheet = wk.CreateSheet("Person1");
int rowIndex = 0;
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
//数据库中Age为可空类型
int? age = reader.IsDBNull(2) ? null : (int?) reader.GetInt32(2);
string gender = reader.GetString(3); IRow row = sheet.CreateRow(rowIndex);
rowIndex++; //向行中创建单元格
row.CreateCell(0).SetCellValue(id);
row.CreateCell(1).SetCellValue(name);
//对于数据库中可空的类型
ICell cellAge = row.CreateCell(2);
if (age == null)
{
//设置单元格的数据类型为Blank,即空单元格
cellAge.SetCellType(CellType.BLANK);
}
else
{
cellAge.SetCellValue((int)age);
}
row.CreateCell(3).SetCellValue(gender);
}
using (FileStream write=File.OpenWrite("TablePersons.xls"))
{
wk.Write(write);
}
}
}
Console.WriteLine("ok");
}
输出结果

4.Excel中数据读取到数据库中
Excel中数据

代码运行后,数据库中数据

代码
private void ExcelToTable( )
{
using (FileStream read=File.OpenRead("Persons.xls"))
{
//1.创建工作簿对象
IWorkbook wk=new HSSFWorkbook(read);
//2.读取第一张工作表
ISheet sheet = wk.GetSheetAt(0);
string strSql = "insert into Persons values(@Name,@Age,@Gender)";
//遍历工作表中的每一行:从0开始
for (int i = 0; i <= sheet.LastRowNum-1; i++)
{
//遍历每一行中的每一个单元格:从0开始
//字符串类型
IRow row = sheet.GetRow(i);
string name = row.GetCell(0).StringCellValue;
//可空类型
ICell cellAge = row.GetCell(1);
int? age = null;
if (cellAge != null && cellAge.CellType != CellType.BLANK)
{
age = Convert.ToInt32(cellAge.NumericCellValue);
}
//字符类型
char[] genders = row.GetCell(2).StringCellValue.ToCharArray();
char gender = genders[0]; SqlParameter[] paras=new SqlParameter[]
{
new SqlParameter("@Name",name),
new SqlParameter("@Age",age==null?DBNull.Value:(object)age),
new SqlParameter("@Gender",gender),
};
SQLHelper.ExecuteNonquery(strSql, CommandType.Text, paras);
}
}
Console.WriteLine("ok");
}
C#学习-处理Excel的更多相关文章
- ArcGIS学习记录-Excel和Txt中XY点数据生成点Shape文件方法
(一)Excel中XY点数据生成点Shape文件方法 1.Excel表如下: 2.点击ArcGIS中的"+"号按钮,添加数据.选择第一步中制作好的Excel文件,点击Add按钮 ...
- Python学习笔记-EXCEL操作
环境Python3 创建EXCEL,覆盖性创建 #conding=utf-8 import xlwt def BuildExcel(ExcelName,SheetName,TitleList,Data ...
- python学习,excel操作之xlrd模块常用操作
import xlrd ##工作表## #打开excel f = xlrd.open_workbook("test.xlsx") file = f.sheet_by_name(&q ...
- Asp.net core 学习笔记 (Excel 读写)
EPPlus 已经支持 .net core 了 https://www.nuget.org/packages/EPPlus https://github.com/JanKallman/EPPlus 写 ...
- VSTO学习(二)——Excel对象模型
要开发Excel的项目,就自然少不了对Excel对象模型的了解了,只有了解Excel对象模型,这样才能更好地对Excel进行处理.下面先给出一张Excel对象模型的图: 下面就具体对上图中的各个对象做 ...
- Python基础学习七 Excel操作
python操作excel,python操作excel使用xlrd.xlwt和xlutils模块, xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的. ...
- Python学习之==>Excel操作
一.简介 使用Python读.写.修改excel分别需要用到xlrd.xlwt以及xlutils模块,这几个模块使用pip安装即可. 二.读excel import xlrd book = xlrd. ...
- QTP学习笔记--Excel数据源
直接读取Excel表格的function摘自此处http://www.51testing.com/html/40/307440-827863.html 特此感谢! Excel作为QTP自动化测试的数 ...
- java学习(四) excel读取
private static void readExcel() { String filePath = "C:/Standardzid.xls"; File file = new ...
随机推荐
- [bzoj1004][HNOI2008][Cards] (置换群+Burnside引理+动态规划)
Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红 ...
- 管理Bean的生命周期
[IOC容器中Bean的生命周期方法] 1.SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务. 2.Spring IOC容器对Bean的生命周 ...
- 【MongoDB】2、安装MongoDB 2.6.1 on Unbuntu 14.04(学习流水账)
http://blog.csdn.net/stationxp/article/details/26077439 计划: 装一个虚机,ubuntu吧,14.04 Trusty Tahr. 安装Mongo ...
- [luoguP1196] 银河英雄传说(并查集)
传送门 记录 up[x] 表示 x 上方有多少个 all[x] 表示当前连通的有多少个 find 的时候 和 合并的时候 更新一下即可 ——代码 #include <cstdio> #in ...
- 轰炸III(codevs 1830)
题目背景 一个大小为N*M的城市遭到了X次轰炸,每次都炸了一个每条边都与边界平行的矩形. 题目描述 在轰炸后,有Y个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮. ...
- 校长的收藏(洛谷 U4534)
题目背景 XS中学的校长喜欢收集手办,家里面都是价值不菲的手办. 校长喜欢给手办们排队并且对于某些些区间内的手办喜爱有加. 现在,校长外出散步(找乐子),你潜入他的房间打算借(偷走)他的手办炫耀一下. ...
- codevs1226 倒水问题
题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水 ...
- 怎样在Linux下使用Markdown进行文档工作
怎样在Linux下使用Markdown进行文档工作 在Linux系统中,编辑markdown能够用retext工具: sudo apt-get install retext retext Releas ...
- Python基础--基本文件操作
全部的编程语言都一样,学完了一些自带的数据机构后,就要操作文件了. 文件操作才是实战中的王道. 所以,今天就来分享一下Python中关于文件的一些基本操作. open方法 文件模式 这个模式对于写入文 ...
- 自己定义 View 基础和原理
课程背景: 在 Android 提供的系统控件不能满足需求的情况下,往往须要自己开发自己定义 View 来满足需求,可是该怎样下手呢.本课程将带你进入自己定义 View 的开发过程,来了解它的一些原理 ...