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


    1.程序界面

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

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

       

    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<span> FileStream(writeExcelPath, FileMode.Open, FileAccess.Read);
            XSSFWorkbook writeBook = new<span> XSSFWorkbook(writeFile);
            XSSFSheet writeSheet = (XSSFSheet)writeBook.GetSheetAt(0<span>);
    
    
            for (int i = 0; i &lt; sheet.LastRowNum + 1; i++<span>)
            {<br>                //获取第i行,得到对象
                IRow row =<span> sheet.GetRow(i);<br>                //新建第i行,并返回得到的对象
                IRow writeRow =<span> writeSheet.CreateRow(i);
                for (int j = 0; j &lt; row.LastCellNum+1; j++<span>)
                {
                    ICell cell =<span> row.GetCell(j);
                    if (cell == null<span>)
                    {
                        break<span>;
                    }
    


    //这句话是设置单元格类型为string类型,否则如果单元格内容为numeric的话,会抛出异常
    row.GetCell(j).SetCellType(CellType.STRING);
    string readValue = sheet.GetRow(i).GetCell(j).StringCellValue;

                    if (string<span>.IsNullOrEmpty(readValue))
                    {
                        continue<span>;
                    }
                    //新建第i行,第j列
                    writeRow.CreateCell(j);
                    writeSheet.GetRow(i).GetCell(j).SetCellValue(readValue);
                    textBox3.Text +=<span> readValue;
                }
            }<br>            //保存的地址,我做了处理,不让他保存在我选择的地址上,实际上不处理的话也没有问题
            string savePath = textBox2.Text.Replace(".xlsx","_bak.xlsx"<span>);
            FileStream saveFile = new<span> FileStream(savePath, FileMode.Create);<br>            //将处理后的文件保存到新文件中去
            writeBook.Write(saveFile);
            saveFile.Close();
            file.Close();
            MessageBox.Show("处理excel完毕"<span>);
        }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
    
    复制代码

    3.注意事项 

    ①HSSFWorkbook ,HSSFSheet是处理excel2003的,XSSFWorkbook,XSSFSheet是处理excel2007+的,切忌,一定不能少引用文件 
    ② IRow writeRow = writeSheet.CreateRow(i);这句话要放在第一层循环外面,要把IRow单独拿出来作为一个变量,然后在内层循环能调用,不然的话,会导致只复制到最后一列
    
    
    
    
    
    
    
    
    
    
    
    

       

  • 相关阅读:
    awk 字符串连接操作(字符串转数字,数字转字符串)
    Jenkins配置自动发送邮件,成功!
    可嵌入到网页的实用查询代码
    Windows中打开和关闭FSO文件读写权限的方法
    网站项目模型及业务流程分析
    2个JS版的MD5加密脚本
    申请@msn.com的邮箱最新网址
    成功激励格言精选
    随机切换广告图片
    译自MSDN非常详细的IMG,IFRAME的属性参考手册
  • 原文地址:https://www.cnblogs.com/owenzh/p/13305307.html
Copyright © 2020-2023  润新知