//新的Excel寫法#1

 //新的Excel寫法#1

public void ExcelCreate<T>(List<T> lsT , string savePath, XSSFWorkbook workbook = null, string SheetName = "預設頁面", string DataName = null

            , bool overwrite = false)

        {

            //檢查workbook null則建立

            if (workbook == null){

                workbook = new XSSFWorkbook();

                workbook.CreateSheet(SheetName);

            }

            //複寫 => 刪除後新增

            if (overwrite == true)

                workbook.RemoveName(SheetName);

            //若 Sheet為null 建立CreateSheet

            if (workbook.GetSheet(SheetName) == null)

                workbook.CreateSheet(SheetName);

            

            try

            {

                //Sheet

                ISheet Sheet = workbook.GetSheet(SheetName);


                //get true lastRow

                int lastRow = Sheet.LastRowNum;

                if (Sheet.GetRow(lastRow) != null)

                    lastRow++;


                //由最後一筆開始新增

                //或第一筆開始複寫

                for (int i = lastRow; i < lsT.Count() + lastRow; i++)

                {

                    //Build New Rows

                    IRow Rows = Sheet.CreateRow(i);

                    //Reset Cell 從第一個開始

                    int CellNumber = 0;


                    foreach (var list in lsT[i - lastRow].GetType().GetRuntimeProperties())

                    {

                        //取得目標data

                        var data = list.GetValue(lsT[i - lastRow]);


                        //平攤後list

                        if (string.IsNullOrEmpty(data?.ToString()))

                            Rows.CreateCell(CellNumber).SetCellValue("");

                        else if (data.GetType().Equals(typeof(double)))

                        {

                            Rows.CreateCell(CellNumber).SetCellValue(int.Parse(data?.ToString()));

                            Rows.GetCell(CellNumber).CellStyle = SetCellStyle(1, workbook);

                        }

                        else if (data.GetType().Equals(typeof(DateTime)))

                        {

                            Rows.CreateCell(CellNumber).SetCellValue(DateTime.Parse(data?.ToString()));

                            Rows.GetCell(CellNumber).CellStyle = SetCellStyle(0, workbook);

                        }

                        else

                            Rows.CreateCell(CellNumber).SetCellValue(data.ToString());

                        CellNumber++;

                    }

                }


                if (!System.IO.Directory.Exists(savePath))

                    System.IO.Directory.CreateDirectory(savePath);


                //已出遞迴

                using (var fileData = new FileStream(savePath + (DataName == null ? "" : DataName) + DateTime.Now.ToString("yyyyMMdd") + ".xlsx", FileMode.Create))

                    workbook.Write(fileData);

            }

            catch (Exception ex)

            {

                log.Log(NLog.LogLevel.Error, $"ExcelCreate : SetDataError");

            }

        }


留言

這個網誌中的熱門文章

無法載入檔案或組件 'System.IO.Compression' 或其相依性的其中之一。

MongoDB 入門

javascript 更改屬性及創建標籤