C#操作Excel表格,不积硅步无以至千里

news/2024/11/8 16:43:47/




            本文主要介绍一下c#来操作excel表格,主要介绍我使用的,我是使用第三方提供的函数库(NPOI)来进行excel的操作,而NPOI库函数在其官网下,我这里就不拿出来了。

1:NPOI库函数

NPOI库函数下载后,解压出来有一下几个DLL文件,我们就是通过这几个DLL库文件中提供的函数来操作

2:介绍一下excel表格

    2.1: excel表格有两种后缀名 .xls 和 .xlsx。.xls是office2007以前版本的excel表的后缀名,而.xlsx是office2007以后的excel

excel表的后缀名。

    2.2:一个excel文件表里有多个工作簿,每一个工作簿中都可以存数据,如下图

3:通过c#来操作excel

     3.1:添加NPOI库并引用命名空间

              

3.2:打开或创建一个excel表,并向里写入数据

   

  1. //打开或创建excel文件并向里添加数据
  2. HSSFWorkbook wk = new HSSFWorkbook();//这是用于后缀名是.xls的excel文件的操作
  3. //XSSFWorkbook wk = new XSSFWorkbook(); 这是用于后缀名是.xlsx的excel文件的操作
  4. ISheet isheet = wk.CreateSheet("Sheet1");//这是创建一个工作簿,其名字位 "Sheet1"
  5. IRow row;
  6. ICell cell;
  7. int rowIndex = 0;
  8. int cellIndex = 0;
  9. for (rowIndex = 0; rowIndex < 10; rowIndex++)
  10. {
  11. row = isheet.CreateRow(rowIndex);//这个函数是创建该工作簿的第rowIndex行,并不是创建rowIndex行,从第0行开始
  12. for (cellIndex = 0; cellIndex < 10; cellIndex++)
  13. {
  14. cell = row.CreateCell(cellIndex);//这个函数是创建该工作簿第cellIndex列(即某个单元格),从第0列开始
  15. cell.SetCellValue(1);//这个函数就是向第rowIndex行和第cellIndex列放数据,此处放的是int型的数字1
  16. }
  17. }
  18. //我们excel文件的数据已经添加完了,然后我们就要把数据写入excel中
  19. //这里我们通过FileStream类来完成(此处是文本操作,而文本操作有多重类,这里就不介绍)
  20. //对于文本的操作,需要我们自己手动的释放资源
  21. // FileStream("2.xls", FileMode.OpenOrCreate)中的两个参数的解释,FileStream这里类的构造函数有很多中,不一一介绍,
  22. //"2.xls":这是指定打开或创建的excel文件的路径和excel的名字,路径可以是相对路径,也可以是绝对路径
  23. // 这里我用的是相对路径,相对于该程序的可执行文件,即.exe文件的路径(我这里就是在.exe所在的文件夹中的2.xls表格)
  24. // 如果用的是XSSFWorkbook创建.xlsx的excel文件的话,此处就应该是2.xlsx。
  25. //FileMode.OpenOrCreate:这是指定对2.xls这个excel文件的操作模式,这里是如果该路径下没有2.xls就创建,有就打开
  26. FileStream fs2 = new FileStream("2.xls", FileMode.OpenOrCreate);
  27. wk.Write(fs2);//向打开的这个2.xls文件中写入上面添加的数据
  28. wk.Close();//这就是释放资源 (详细知识请参考其它资料,这里不做解释)
  29. fs2.Close();
  30. fs2.Dispose();
  31. //同时我们也可以不用自己手动释放资源,使用using ,其代码如下
  32. //using (FileStream fs = new FileStream ("2.xls",FileMode.OpenOrCreate))
  33. //{
  34. // wk.Write(fs);//向打开的这个1.xls文件中写入并保存。
  35. //}

创建的2.xls文件和其写入的数据如下图:

3.3:读取excel文件中的数据

//读取excel中的数据
//此处我同样是用FileStream类来读取文件,并是用了using,不用再手动释放资源
using (FileStream fs = File.OpenRead("1.xls"))
{
IWorkbook workbook = null;
//这里需要根据文件名格式判断一下
//HSSF只能读取xls的
//XSSF只能读取xlsx格式的
if (Path.GetExtension(fs.Name) == ".xls")
{
workbook = new HSSFWorkbook(fs);
}
else if (Path.GetExtension(fs.Name) == ".xlsx")
{
workbook = new XSSFWorkbook(fs);
}
//因为Excel表中可能不止一个工作簿,这里为了演示,我们遍历所有工作簿
//同时要注意excel的工作簿的对应关系,其工作簿也是从0开始
//工作簿位置为0时,其在excel表的最左边,参考下面图一
for (int h = 0; h < workbook.NumberOfSheets; h++)
{
//得到当前sheet
ISheet sheet = workbook.GetSheetAt(h);
IRow row;//
//也可以通过GetSheet(name)得到
//遍历表中所有的行
//注意这里加1,这里得到的最后一个单元格的索引默认是从0开始的
for (int i = 0; i < sheet.LastRowNum; i++)  //对工作表每一行 
{                      
row = sheet.GetRow(i);   //row读入第i行数据 
if (row != null) 

for (int j = 0; j < row.LastCellNum; j++)  //对工作表每一列 
{
//获取第i行第j列数据  其数据是通过返回string类型的来获取
string cellValue = row.GetCell(j).ToString(); //cellValue就是第i行第j列这个单元格中的数据
richTextBox1.AppendText(cellValue + " ");
}
richTextBox1.AppendText("\r\n");


}
}//using


//读取excel中的数据 //此处我同样是用FileStream类来读取文件,并是用了using,不用再手动释放资源 using (FileStream fs = File.OpenRead("2.xls")) { IWorkbook workbook = null; //这里需要根据文件名格式判断一下 //HSSF只能读取xls的 //XSSF只能读取xlsx格式的 if (Path.GetExtension(fs.Name) == ".xls") {

workbook = new HSSFWorkbook(fs); } else if (Path.GetExtension(fs.Name) == ".xlsx") { workbook = new XSSFWorkbook(fs); } //因为Excel表中可能不止一个工作簿,这里为了演示,我们遍历所有工作簿 //同时要注意excel的工作簿的对应关系,其工作簿也是从0开始 //工作簿位置为0时,其在excel表的最左边,参考下面图一 for (int h = 0; h < workbook.NumberOfSheets;h++) { //得到当前sheet ISheet sheet = workbook.GetSheetAt(h); IRow row;// //也可以通过GetSheet(name)得到 //遍历表中所有的行 //注意这里加1,这里得到的最后一个单元格的索引默认是从0开始的 for (int i = 0; i < sheet.LastRowNum; i++) //对工作表每一行 { row = sheet.GetRow(i); //row读入第i行数据 if (row != null) { for (intj = 0; j < row.LastCellNum; j++) //对工作表每一列 { //获取第i行第j列数据 其数据是通过返回string类型的来获取 string cellValue = row.GetCell(j).ToString(); //cellValue就是第i行第j列这个单元格中的数据 richTextBox1.AppendText(cellValue + " "); } richTextBox1.AppendText("\r\n");               


其从2.xls中读取出来显示如下:


注:excel中工作簿在excel中的位置

             图一    



这是我自己用c#操作excel的方法,其实还有很多,也没去研究。

同时,不知道写得好不好,主要是自己的整理方便以后看,同时也希望对需要的朋友有所帮助。

上面的代码拷贝下来就可以直接用,我是程序中验证过的。代码没问题,如果你们不能用,可能就是库没添加对或其他问题。











http://www.ppmy.cn/news/752914.html

相关文章

向控件拖放数据,不积硅步无以至千里

1. 设置待接收数据控件的AllowDrop属性为True 2. private void textBox1_DragEnter(object sender, DragEventArgs e) {//必须设置拖放效果e.Effect DragDropEffects.Copy; }private void textBox1_DragDrop(object sender, DragEventArgs e) {IDataObject dataObject e.Da…

Pickit 3D视觉定位抓取系统 -硅步机器人

Pickit 3D视觉定位抓取系统 产品特点 1. Pickit面向机器人程序开发者及系统集成商&#xff0c;使用者不需要视觉基础或额外培训即可简便操作。 2. 定位各种形体及尺寸工件 3. 适应各种颜色环境 4. 适应各种材料 &#xff08;金属&#xff0c;塑料&#xff0c;木材…

ArrayList常用方法,不积硅步无以至千里

添加单个元素(可以是对象/基本类型/集合本身:arrayList.Add(元素) 添加集合中的每个元素(非集合本身):arrayList.AddRange(元素的集合) 指定位置插入元素:arrayList.Insert(索引,元素) 指定位置插入集合中的每个元素(非集合本身):arrayList.InsertRange(索引,元素的集合) 根…

Directory常用方法,不积硅步无以至千里

private void button1_Click(object sender, EventArgs e) {try{//创建主测试文件夹Directory.CreateDirectory(".\TestDirectory");//创建待剪切测试文件夹Directory.CreateDirectory(".\MoveDirectory");//将待剪切测试文件夹,剪切到主测试文件夹中Direc…

string常用方法,不积硅步无以至千里

1. 字符串至数值转换: 创建转换结果标志:bool successFlagfalse; 创建待转换字符串:string age27; 创建用来保存转换结果值的变量:int result-1; 转换:希望转换后得到的类型.TryParse(age,out result); 2. 字符串至字符数组转换: 创建待转换字符串:string info"abc123&qu…

HashTable常用方法,不积硅步无以至千里

1. 创建HashTable对象:HashTable hashTablenew HashTabel(); 2. 添加键值对:hashTable.Add(键,值); 3. 清空键值对:hashTable.Clear(); 4. 根据键删除键值对:hashTable.Remove(键); 5. 通过键获取值:hashTable[键] 6. 获取键的集合: 创建ArrayList集合:ArrayList arrayLis…

数据库常用命令,不积硅步无以至千里

1. 查看数据库:Show DataBases; 2. 新建数据库:Create DataBase 库名 characterset 字符集名称 3. 查看数据库信息:Show CreateDataBase 库名 4. 删除数据库:Drop DataBase 库名 5. 使用数据库:Use 库名 6. 创建表:Create Table 表名(名称) charset字符集名称 7. 显示当前…

常用快捷键,不积硅步无以至千里

1)全部代码格式整理:CtrlK,D 2)所选代码格式整理:CtrlK,F 3)智能代码提示:CtrlJ 4)所选代码注释:CtrlK,C 5)所选代码取消注释:CtrlK,U 6)折叠代码:#Region,#EndRegion 7)帮助文件:F1 8)从光标位置选择到行尾:ShiftEnd 9)逐语句调试:F11 10)逐过程调试:F10 11)跳出调试…