Files
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

265 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Data;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using WebLib;
namespace Education.Report
{
public class 學員簽到表 : ReportBase
{
private string 計畫名稱;
public string 公司名稱;
public string 訓練日期;
public string 辦理地點;
public string 訓練企劃名稱;
public string 講師姓名;
public string 承辦人員;
public DataTable data;
public List<DateTime> 訓練日期List;
//public MemoryStream DoReport()
//{
// int 序號 = 1;
// int 工作表序號 = 1;
// workbook.RemoveSheetAt(0);
// bodyStyleCenter.VerticalAlignment = VerticalAlignment.Justify;
// foreach (DataRow r in data.Rows)
// {
// string data計畫名稱 = DAC.GetString(r["計畫年度名稱"]);
// string data站別名稱 = DAC.GetString(r["站別名稱"]);
// string data職務名稱 = DAC.GetString(r["職務名稱"]);
// string data學員姓名 = DAC.GetString(r["學員姓名"]);
// int 簽到格數 = 訓練日期List.Count * 2 - 1;
// if (簽到格數 < 0)
// 簽到格數 = 0;
// // 是否要換頁
// if (計畫名稱 != data計畫名稱)
// {
// 計畫名稱 = data計畫名稱;
// sheet = workbook.CreateSheet("Sheet" + 工作表序號.ToString()) as HSSFSheet;
// SetPaperAndMargin(sheet);
// sheet.RepeatingRows = new CellRangeAddress(0, 3, -1, -1);
// // workbook.SetRepeatingRowsAndColumns(workbook.GetSheetIndex(sheet), -1, -1, 0, 3);
// excel.Sheet = sheet;
// 工作表序號++;
// // 報表抬頭
// excel.MergeCell(0, 0, 0, 7 + 簽到格數);
// excel.SetCellValue(0, 0, String.Format("{0}\n{1}\n教育訓練簽到表", 公司名稱, 計畫名稱), titleStyleCenter);
// excel.SetRowHeightInPoints(0, HeaderRowHeight * 3);
// excel.MergeCell(1, 0, 1, 7 + 簽到格數);
// excel.SetCellValue(1, 0, String.Format("辦理時間:{0}\n辦理地點:{1}\n訓練名稱:{2}\n講師姓名:{3}\n承辦人員:{4}",
// 訓練日期, 辦理地點, 訓練企劃名稱, 講師姓名, 承辦人員),
// bodyStyleLeft);
// excel.SetRowHeightInPoints(1, BodyRowHeight * 5);
// excel.SetRangeOuterBorder(1, 0, 1, 7 + 簽到格數, BorderStyle.Thin);
// excel.MergeCell(2, 0, 4, 0);
// excel.SetCellValue(2, 0, "序號", bodyStyleCenter);
// excel.SetRangeOuterBorder(2, 0, 4, 0, BorderStyle.Thin);
// excel.MergeCell(2, 1, 4, 1);
// excel.SetCellValue(2, 1, "單位", bodyStyleCenter);
// excel.SetRangeOuterBorder(2, 1, 4, 1, BorderStyle.Thin);
// excel.MergeCell(2, 2, 4, 2);
// excel.SetCellValue(2, 2, "職務名稱", bodyStyleCenter);
// excel.SetRangeOuterBorder(2, 2, 4, 2, BorderStyle.Thin);
// excel.MergeCell(2, 3, 4, 3);
// excel.SetCellValue(2, 3, "姓名", bodyStyleCenter);
// excel.SetRangeOuterBorder(2, 3, 4, 3, BorderStyle.Thin);
// excel.MergeCell(2, 4, 2, 4 + 簽到格數);
// excel.SetCellValue(2, 4, "簽到", bodyStyleCenter);
// excel.SetRangeOuterBorder(2, 4, 2, 4 + 簽到格數, BorderStyle.Thin);
// for (int i = 0; i < 訓練日期List.Count; i++)
// {
// excel.MergeCell(3, 4 + i * 2, 3, 5 + i * 2);
// excel.SetCellValue(3, 4 + i * 2, 訓練日期List[i].ToString("yyyy-MM-dd"), bodyStyleCenter);
// excel.SetRangeOuterBorder(3, 4 + i * 2, 3, 5 + i * 2, BorderStyle.Thin);
// excel.SetCellValue(4, 4 + i * 2, "上午", bodyStyleCenter);
// excel.SetCellValue(4, 5 + i * 2, "下午", bodyStyleCenter);
// }
// excel.MergeCell(2, 5 + 簽到格數, 3, 6 + 簽到格數);
// excel.SetCellValue(2, 5 + 簽到格數, "用餐別", bodyStyleCenter);
// excel.SetRangeOuterBorder(2, 5 + 簽到格數, 3, 6 + 簽到格數, BorderStyle.Thin);
// excel.SetCellValue(4, 5 + 簽到格數, "葷", bodyStyleCenter);
// excel.SetCellValue(4, 6 + 簽到格數, "素", bodyStyleCenter);
// excel.MergeCell(2, 7 + 簽到格數, 4, 7 + 簽到格數);
// excel.SetCellValue(2, 7 + 簽到格數, "備註", bodyStyleCenter);
// excel.SetRangeOuterBorder(2, 7 + 簽到格數, 4, 7 + 簽到格數, BorderStyle.Thin);
// // 設定各欄寬度
// excel.SetColumnWidthInChars(0, 8);
// excel.SetColumnWidthInChars(1, 26);
// excel.SetColumnWidthInChars(2, 16);
// excel.SetColumnWidthInChars(3, 16);
// for (int i = 0; i < 訓練日期List.Count; i++)
// {
// excel.SetColumnWidthInChars(4 + i * 2, 8);
// excel.SetColumnWidthInChars(5 + i * 2, 8);
// }
// excel.SetColumnWidthInChars(5 + 簽到格數, 8);
// excel.SetColumnWidthInChars(6 + 簽到格數, 8);
// excel.SetColumnWidthInChars(7 + 簽到格數, 16);
// excel.SetRowHeightInPoints(2, BodyRowHeight);
// excel.SetRowHeightInPoints(3, BodyRowHeight);
// excel.SetRowHeightInPoints(4, BodyRowHeight);
// 序號 = 1;
// }
// // 報表內容
// excel.SetCellValue(序號 + 4, 0, 序號, bodyStyleCenter);
// excel.SetCellValue(序號 + 4, 1, data站別名稱, bodyStyleCenter);
// excel.SetCellValue(序號 + 4, 2, data職務名稱, bodyStyleCenter);
// excel.SetCellValue(序號 + 4, 3, data學員姓名, bodyStyleCenter);
// for (int i = 0; i < 訓練日期List.Count; i++)
// {
// excel.SetCellValue(序號 + 4, 4 + i * 2, "", bodyStyleCenter);
// excel.SetCellValue(序號 + 4, 5 + i * 2, "", bodyStyleCenter);
// }
// excel.SetCellValue(序號 + 4, 5 + 簽到格數, "", bodyStyleCenter);
// excel.SetCellValue(序號 + 4, 6 + 簽到格數, "", bodyStyleCenter);
// excel.SetCellValue(序號 + 4, 7 + 簽到格數, "", bodyStyleCenter);
// excel.SetRowHeightInPoints(序號 + 4, (int)Math.Truncate(BodyRowHeight * 1.5));
// 序號++;
// }
// MemoryStream ms = new MemoryStream();
// workbook.Write(ms);
// return ms;
//}
public MemoryStream DoReport()
{
int 序號 = 1;
int 工作表序號 = 1;
workbook.RemoveSheetAt(0);
bodyStyleCenter.VerticalAlignment = VerticalAlignment.Justify;
for (int i = 0; i < 訓練日期List.Count; i++)
{
計畫名稱 = null;
foreach (DataRow r in data.Rows)
{
string data計畫名稱 = DAC.GetString(r["計畫年度名稱"]);
string data站別名稱 = DAC.GetString(r["站別名稱"]);
string data職務名稱 = DAC.GetString(r["職務名稱"]);
string data學員姓名 = DAC.GetString(r["學員姓名"]);
// 是否要換頁
if (計畫名稱 != data計畫名稱)
{
計畫名稱 = data計畫名稱;
sheet = workbook.CreateSheet("Sheet" + 工作表序號.ToString());
SetPaperAndMargin(sheet);
sheet.RepeatingRows = new CellRangeAddress(0, 3, -1, -1);
// workbook.SetRepeatingRowsAndColumns(workbook.GetSheetIndex(sheet), -1, -1, 0, 3);
excel.Sheet = sheet;
工作表序號++;
// 報表抬頭
excel.MergeCell(0, 0, 0, 8);
excel.SetCellValue(0, 0, String.Format("{0}\n{1}\n教育訓練簽到表", 公司名稱, 計畫名稱), titleStyleCenter);
excel.SetRowHeightInPoints(0, HeaderRowHeight * 3);
excel.MergeCell(1, 0, 1, 8);
excel.SetCellValue(1, 0, String.Format("辦理時間:{0:yyyy年MM月dd日(dddd)}\n辦理地點:{1}\n訓練名稱:{2}\n講師姓名:{3}\n承辦人員:{4}",
訓練日期List[i], 辦理地點, 訓練企劃名稱, 講師姓名, 承辦人員),
bodyStyleLeft);
excel.SetRowHeightInPoints(1, BodyRowHeight * 5);
excel.SetRangeOuterBorder(1, 0, 1, 8, BorderStyle.Thin);
excel.MergeCell(2, 0, 3, 0);
excel.SetCellValue(2, 0, "序號", bodyStyleCenter);
excel.SetRangeOuterBorder(2, 0, 3, 0, BorderStyle.Thin);
excel.MergeCell(2, 1, 3, 1);
excel.SetCellValue(2, 1, "單位", bodyStyleCenter);
excel.SetRangeOuterBorder(2, 1, 3, 1, BorderStyle.Thin);
excel.MergeCell(2, 2, 3, 2);
excel.SetCellValue(2, 2, "職務名稱", bodyStyleCenter);
excel.SetRangeOuterBorder(2, 2, 3, 2, BorderStyle.Thin);
excel.MergeCell(2, 3, 3, 3);
excel.SetCellValue(2, 3, "姓名", bodyStyleCenter);
excel.SetRangeOuterBorder(2, 3, 3, 3, BorderStyle.Thin);
excel.MergeCell(2, 4, 2, 5);
excel.SetCellValue(2, 4, 訓練日期List[i].ToString("yyyy-MM-dd"), bodyStyleCenter);
excel.SetRangeOuterBorder(2, 4, 2, 5, BorderStyle.Thin);
excel.SetCellValue(3, 4, "簽到", bodyStyleCenter);
excel.SetCellValue(3, 5, "簽退", bodyStyleCenter);
excel.MergeCell(2, 6, 2, 7);
excel.SetCellValue(2, 6, "用餐別", bodyStyleCenter);
excel.SetRangeOuterBorder(2, 6, 2, 7, BorderStyle.Thin);
excel.SetCellValue(3, 6, "葷", bodyStyleCenter);
excel.SetCellValue(3, 7, "素", bodyStyleCenter);
excel.MergeCell(2, 8, 3, 8);
excel.SetCellValue(2, 8, "備註", bodyStyleCenter);
excel.SetRangeOuterBorder(2, 8, 3, 8, BorderStyle.Thin);
// 設定各欄寬度
excel.SetColumnWidthInChars(0, 8);
excel.SetColumnWidthInChars(1, 26);
excel.SetColumnWidthInChars(2, 16);
excel.SetColumnWidthInChars(3, 16);
excel.SetColumnWidthInChars(4, 16);
excel.SetColumnWidthInChars(5, 16);
excel.SetColumnWidthInChars(6, 8);
excel.SetColumnWidthInChars(7, 8);
excel.SetColumnWidthInChars(8, 16);
excel.SetRowHeightInPoints(2, BodyRowHeight);
excel.SetRowHeightInPoints(3, BodyRowHeight);
序號 = 1;
}
// 報表內容
excel.SetCellValue(序號 + 3, 0, 序號, bodyStyleCenter);
excel.SetCellValue(序號 + 3, 1, data站別名稱, bodyStyleCenter);
excel.SetCellValue(序號 + 3, 2, data職務名稱, bodyStyleCenter);
excel.SetCellValue(序號 + 3, 3, data學員姓名, bodyStyleCenter);
excel.SetCellValue(序號 + 3, 4, "", bodyStyleCenter);
excel.SetCellValue(序號 + 3, 5, "", bodyStyleCenter);
excel.SetCellValue(序號 + 3, 6, "", bodyStyleCenter);
excel.SetCellValue(序號 + 3, 7, "", bodyStyleCenter);
excel.SetCellValue(序號 + 3, 8, "", bodyStyleCenter);
excel.SetRowHeightInPoints(序號 + 3, (int)Math.Truncate(BodyRowHeight * 1.5));
序號++;
}
}
MemoryStream ms = new MemoryStream();
workbook.Write(ms);
return ms;
}
}
}