NPOI를 사용하여 Excel로 DataTable 가져오기

4433 단어 c#npoi.net
DataTable의 데이터를 Excel로 만들어 보존해야 하는 학생들이 많을 것이다. 많은 예가 있지만 최근에 자신을 위해 이 부분을 만들어 블로그에 기록했다.
Excel은 일반적으로 두 가지 형식이 있는데 그것이 바로 xls와 xlsx이다. NPOI에서도 각각 이 두 가지 형식이 있는데 지금은 NPOI 2.2.0으로 겨냥하고 있다.NET 4.0의 버전을 예로 들 수 있습니다.
1. 우선 좋은 NPOI를 다운로드할 것입니다.NET 4.0의 dll을 참조에 추가합니다.
2. xls와 xlsx를 호환하기 위해 필요한 것을 제외한다.Net Program 참조 세트는 NPOI 참조 세트를 참조해야 합니다.
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;

3. 직접 생성하는 방법
	/// 
        ///  Excel
        /// 
        ///  
        ///  
        ///  
        ///  DataTable
        /// 
        public bool SaveXLS(String filePath,string filename,string filetype, DataTable dt)
        {
            try
            {
                if (filetype.ToLower() == ".xls")
                {
                    if (!Directory.Exists(filePath))
                    {
                        Directory.CreateDirectory(filePath);
                    }
                    int count = 0;
                    HSSFWorkbook wb = new HSSFWorkbook();
		    ISheet sh = wb.CreateSheet("TABLENAME");
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        HSSFRow row = (HSSFRow)sh.CreateRow(0);
                        for (int j = 0; j < dt.Columns.Count; ++j)
                        {
                            row.CreateCell(j).SetCellValue(dt.Columns[j].ColumnName);
                        }
                        count = 1;
                    }

                    for (int i = 0; i < dt.Rows.Count; ++i)
                    {
                        HSSFRow row = (HSSFRow)sh.CreateRow(count);
                        for (int j = 0; j < dt.Columns.Count; ++j)
                        {
                            row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                        }
                        ++count;
                    }

                    using (FileStream stm = File.OpenWrite(filePath + filename))
                    {
                        wb.Write(stm);
                    }
                    return true;
                }
                if (filetype.ToLower() == ".xlsx")
                {
                    if (!Directory.Exists(filePath))
                    {
                        Directory.CreateDirectory(filePath);
                    }
                    int count = 0;
                    XSSFWorkbook wb = new XSSFWorkbook();
                    ISheet sh = wb.CreateSheet("TABLENAME");
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        XSSFRow row = (XSSFRow)sh.CreateRow(0);
                        for (int j = 0; j < dt.Columns.Count; ++j)
                        {
                            row.CreateCell(j).SetCellValue(dt.Columns[j].ColumnName);
                        }
                        count = 1;
                    }

                    for (int i = 0; i < dt.Rows.Count; ++i)
                    {
                        XSSFRow row = (XSSFRow)sh.CreateRow(count);
                        for (int j = 0; j < dt.Columns.Count; ++j)
                        {
                            row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                        }
                        ++count;
                    }

                    using (FileStream stm = File.OpenWrite(filePath + filename))
                    {
                        wb.Write(stm);
                    }
                    return true;
                }
            }
            catch (Exception ex)
            {
                string path = System.Environment.CurrentDirectory + "\\" + System.DateTime.Now.ToString("yyyyMMdd") + "_ABOS.log";
                SaveLog(path,System.DateTime.Now.ToString() + " -->  :"+ex.ToString());
                return false;
            }
        }

4. 위의 방법에서 SaveLog는 내가 Log 기록을 저장하는 방법으로 삭제할 수 있다. 이렇게 하면 간단한 Excel을 생성할 수 있다. 만약에 격식, 예를 들어 칸의 중앙, 배경색 등을 추가해야 한다면 NPOI의 다른 방법을 사용해야 한다.
참고: 생성된 Excel은 열 때 "읽을 수 없는 내용"과 같은 오류를 자주 보고합니다. 기본적으로 생성된 후에 코드로 다른 작업을 해서 Dispose () 를 잊어버려서 두 번째 생성할 때 파일 내용이 손상됩니다.

좋은 웹페이지 즐겨찾기