zoukankan      html  css  js  c++  java
  • NPOI 2.0 教程(二):编辑既存的EXCEL文件

    NPOI 2.0 教程(二):编辑既存的EXCEL文件

    分类: C#技术

    转载请注明出处 http://blog.csdn.net/fujie724

    上一篇中讲了用NPOI创建新EXCEL文件的基本方法,但有时候我们需要的是对一个已有的EXCEL文件进行编辑修改。那么用NPOI该怎么做呢?

    请接着学习

    在这一篇里,我们读入上一篇教程中生成的EXCEL,然后以其做为模版,修改之后保存为另一份EXCEL

    第一步

    1. //上一篇教程中生成的文件
    2. string tempPath = "d:\excel.xls";
    3. HSSFWorkbook wk = null;
    4. using (FileStream fs = File.Open(tempPath, FileMode.Open,
    5. FileAccess.Read, FileShare.ReadWrite))
    6. {
    7. //把xls文件读入workbook变量里,之后就可以关闭了
    8. wk = new HSSFWorkbook(fs);
    9. fs.Close();
    10. }
    //上一篇教程中生成的文件
    string tempPath = "d:\excel.xls";
    HSSFWorkbook wk = null;
    using (FileStream fs = File.Open(tempPath, FileMode.Open,
    FileAccess.Read, FileShare.ReadWrite))
    {
        //把xls文件读入workbook变量里,之后就可以关闭了
        wk = new HSSFWorkbook(fs);   
        fs.Close();
    }

    第二步

    在读入之后,操作HSSFWorkbook这个类就和第一篇教程里一样了。

    必须要遵循的一个规则是,如果你要编辑的行和单元格,原本没有值,或者从未创建过的,就必须先创建。

    如:

    我要使用第二行第一列的单元格,在上一篇教程中并未对这个位置进行创建,那么必须先创建。

    1. //在第二行创建行
    2. IRow row = sheet.CreateRow(1);
    3. //在第二行的第一列创建单元格
    4. ICell cell = row.CreateCell(0);
    //在第二行创建行  
    IRow row = sheet.CreateRow(1);  
    //在第二行的第一列创建单元格  
    ICell cell = row.CreateCell(0);

    之后这个cell才能被使用。

    • 那么如果我不创建,直接使用会怎么样呢?
    • 答:sheet.GetRow(1)取回来的值为null,在null上再使用GetCell(0)就会报空对象的错误。

    在上一篇教程中,我们已经对该文件的第一行第一列的这个位置创建过单元格,并且赋值,所以可以直接使用,采用下面的方式。

    1. //获取第一行
    2. IRow row = sheet.GetRow(0);
    3. //在第一行获取第一列单元格
    4. ICell cell = row.GetCell(0);
    //获取第一行
    IRow row = sheet.GetRow(0);  
    //在第一行获取第一列单元格  
    ICell cell = row.GetCell(0);

    上面两种写法也可以简写成如下的方式

    1. //创建第二行,第一列
    2. ICell cell = sheet.CreateRow(1).CreateCell(0);
    3. //获取第一行,第一列
    4. ICell cell = sheet.GetRow(0).GetCell(0);
    //创建第二行,第一列
    ICell cell = sheet.CreateRow(1).CreateCell(0); 
    
    //获取第一行,第一列
    ICell cell = sheet.GetRow(0).GetCell(0);
    

    然后使用cell.SetCellValue()函数对其赋值即完成编辑。

    当然,赋值语句也可以和上述语句并作一行书写。例如

    1. sheet.GetRow(0).GetCell(0).SetCellValue("编辑的值");
    sheet.GetRow(0).GetCell(0).SetCellValue("编辑的值");

    第三步

    编辑完之后需要保存

    1. using (FileStream fileStream = File.Open("d:\excel.xls",
    2. FileMode.OpenOrCreate, FileAccess.ReadWrite))
    3. {
    4. wk.Write(fileStream);
    5. fileStream.Close();
    6. }
    using (FileStream fileStream = File.Open("d:\excel.xls",
    FileMode.OpenOrCreate, FileAccess.ReadWrite))
    {
        wk.Write(fileStream);
        fileStream.Close();
    }

    这样就完成了读入已有文件,编辑,保存。

  • 相关阅读:
    前端工程化
    前端模块化CommonJS&ES6
    为什么浮点型运算结果会有误差?
    RequestAnimationFrame知多少?
    CSS三栏布局
    秋招面试
    实现Storage
    Angular
    TypeScript
    微服务架构设计模式
  • 原文地址:https://www.cnblogs.com/alex-13/p/4067269.html
Copyright © 2011-2022 走看看