c#(winform,webform通用)利用npoi将xls文件复制为xlsx文件(excel的修改,保存,包括excel2003-of...

版权所有,禁止匿名转载;禁止商业使用。

1.程序界面


每次需要处理excel文件的时候,都是去百度找方案,真是气一头火,今天好好总结一下,下次就不用度娘了。


我是用winform来试验的,因为winform比较方便测试,实际上只要是在.net平台上,c#写的程序,都是通用的。

c#(winform,webform通用)利用npoi将xls文件复制为xlsx文件(excel的修改,保存,包括excel2003-of...


2.所需dll下载地址


npoi.zip这里包含了所有所需要的dll文件,引入到项目中就可以了


3.代码


public void writeExcel(string readExcelPath, string writeExcelPath)
    {
      //需要读取的excel信息
      FileStream file = new FileStream(readExcelPath, FileMode.Open, FileAccess.Read);
      HSSFWorkbook book = new HSSFWorkbook(file);
      HSSFSheet sheet = (HSSFSheet)book.GetSheetAt(0);
      //需要写入的excel信息  XSSFWorkbook是处理xlsx即excel2007+以上文件的
      FileStream writeFile = new FileStream(writeExcelPath, FileMode.Open, FileAccess.Read);
      XSSFWorkbook writeBook = new XSSFWorkbook(writeFile);
      XSSFSheet writeSheet = (XSSFSheet)writeBook.GetSheetAt(0);
      for (int i = 0; i < sheet.LastRowNum + 1; i++)
      {
        //获取第i行,得到对象
        IRow row = sheet.GetRow(i);
        //新建第i行,并返回得到的对象
        IRow writeRow = writeSheet.CreateRow(i);
        for (int j = 0; j < row.LastCellNum+1; j++)
        {
          ICell cell = row.GetCell(j);
          if (cell == null)
          {
            break;
          }
          //这句话是设置单元格类型为string类型,否则如果单元格内容为numeric的话,会抛出异常
          row.GetCell(j).SetCellType(CellType.STRING);
          string readValue = sheet.GetRow(i).GetCell(j).StringCellValue;
          if (string.IsNullOrEmpty(readValue))
          {
            continue;
          }
          //新建第i行,第j列
          writeRow.CreateCell(j);
          writeSheet.GetRow(i).GetCell(j).SetCellValue(readValue);
          textBox3.Text += readValue;
        }
      }
      //保存的地址,我做了处理,不让他保存在我选择的地址上,实际上不处理的话也没有问题
      string savePath = textBox2.Text.Replace(".xlsx","_bak.xlsx");
      FileStream saveFile = new FileStream(savePath, FileMode.Create);
      //将处理后的文件保存到新文件中去
      writeBook.Write(saveFile);
      saveFile.Close();
      file.Close();
      MessageBox.Show("处理excel完毕");
    }

3.注意事项


①HSSFWorkbook ,HSSFSheet是处理excel2003的,XSSFWorkbook,XSSFSheet是处理excel2007+的,切忌,一定不能少引用文件 

② IRow writeRow = writeSheet.CreateRow(i);这句话要放在第一层循环外


0 0