1. 程式人生 > >C#讀寫Excel表格文件NPOI方式無需安裝office .xls後綴沒問題

C#讀寫Excel表格文件NPOI方式無需安裝office .xls後綴沒問題

key 表頭 調試 成功 c++ exc reat 搜索 neu

  /// <summary>
        /// 讀Excel
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static DataTable getexcel(String fileName)
        {
            DataTable dt = new DataTable();
            IWorkbook workbook = null; //新建IWorkbook對象 
            FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            if (fileName.IndexOf(".xlsx") > 0) // 2007版本 
            {
                workbook = new XSSFWorkbook(fileStream); //xlsx數據讀入workbook 
            }
            else if (fileName.IndexOf(".xls") > 0) // 2003版本 
            {
                workbook = new HSSFWorkbook(fileStream); //xls數據讀入workbook 
            }
            ISheet sheet = workbook.GetSheetAt(0); //獲取第一個工作表 
            IRow row;// = sheet.GetRow(0); //新建當前工作表行數據 
            // MessageBox.Show(sheet.LastRowNum.ToString());
            row = sheet.GetRow(0); //row讀入頭部
            if (row != null)
            {
                for (int m = 0; m < row.LastCellNum; m++) //表頭 
                {
                    string cellValue = row.GetCell(m).ToString(); //獲取i行j列數據 
                    Console.WriteLine(cellValue);
                    dt.Columns.Add(cellValue);
                }
            }
            for (int i = 1; i <= sheet.LastRowNum; i++) //對工作表每一行 
            {
                System.Data.DataRow dr = dt.NewRow();
                row = sheet.GetRow(i); //row讀入第i行數據 
                if (row != null)
                {
                    for (int j = 0; j < row.LastCellNum; j++) //對工作表每一列 
                    {
                        string cellValue = row.GetCell(j).ToString(); //獲取i行j列數據 
                        Console.WriteLine(cellValue);
                        dr[j] = cellValue;
                    }
                }
                dt.Rows.Add(dr);
            }
            Console.ReadLine();
            fileStream.Close();
            return dt;
        }

  

        /// <summary>
        /// 將datatable對象保存為Excel文件
        /// 提供Excel保存路徑及datatable數據對象,成功返回真,失敗返回假。
        /// </summary>
        /// <param name="path"></param>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static bool DataTableToExcel(String path, DataTable dt)
        {
            bool result = false;
            IWorkbook workbook = null;
            FileStream fs = null;
            IRow row = null;
            ISheet sheet = null;
            ICell cell = null;
            try
            {
                if (dt != null && dt.Rows.Count > 0)
                {
                    workbook = new HSSFWorkbook();
                    sheet = workbook.CreateSheet("Sheet0");//創建一個名稱為Sheet0的表 
                    int rowCount = dt.Rows.Count;//行數 
                    int columnCount = dt.Columns.Count;//列數

                    //設置列頭 
                    row = sheet.CreateRow(0);//excel第一行設為列頭 
                    for (int c = 0; c < columnCount; c++)
                    {
                        cell = row.CreateCell(c);
                        cell.SetCellValue(dt.Columns[c].ColumnName);
                    }

                    //設置每行每列的單元格, 
                    for (int i = 0; i < rowCount; i++)
                    {
                        row = sheet.CreateRow(i + 1);
                        for (int j = 0; j < columnCount; j++)
                        {
                            cell = row.CreateCell(j);//excel第二行開始寫入數據 
                            cell.SetCellValue(dt.Rows[i][j].ToString());
                        }
                    }
                    using (fs = File.OpenWrite(path))
                    {
                        workbook.Write(fs);//向打開的這個xls文件中寫入數據 
                        result = true;
                    }
                }
                return result;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                if (fs != null)
                {
                    fs.Close();
                }
                return false;
            }
        }

  添加引用到你的工程中,並使用using字段進行引用。

報錯:未能加載文件或程序集“ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf116

解決方案:刪除所有引用的NPOI相關的dll,直接右鍵工程名稱,點擊“管理NuGet程序包”,搜索NPOI,然後安裝,重新編譯,調試

C#讀寫Excel表格文件NPOI方式無需安裝office .xls後綴沒問題