1. 程式人生 > 實用技巧 >c#(winform,webform通用)利用npoi將xls檔案複製為xlsx檔案(excel的修改,儲存,包括excel2003-office2007+的處理)

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單獨拿出來作為一個變數,然後在內層迴圈能呼叫,不然的話,會導致只複製到最後一列