From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。
---
HotelPms.Share.Windows/Report/GridExcel.cs | 260 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 260 insertions(+), 0 deletions(-)
diff --git a/HotelPms.Share.Windows/Report/GridExcel.cs b/HotelPms.Share.Windows/Report/GridExcel.cs
new file mode 100644
index 0000000..099ceb5
--- /dev/null
+++ b/HotelPms.Share.Windows/Report/GridExcel.cs
@@ -0,0 +1,260 @@
+using NPOI.HSSF.UserModel;
+using NPOI.SS.UserModel;
+using NPOI.XSSF.UserModel;
+using HotelPms.Share.Util;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using HotelPms.Share.Windows.Util;
+using HorizontalAlignment = NPOI.SS.UserModel.HorizontalAlignment;
+using BorderStyle = NPOI.SS.UserModel.BorderStyle;
+
+namespace HotelPms.Share.Windows.Report
+{
+ public class GridExcel : ReportBase, IDisposable, IReport
+ {
+ #region ★★★★★ Declartions ★★★★★
+
+ private bool m_Disposed = false;
+ private string m_File = string.Empty;
+
+ #endregion
+
+ #region ★★★★★ Property ★★★★★
+
+ private bool m_XlsxEnabled = true;
+
+ public bool XlsxEnabled
+ {
+ get { return m_XlsxEnabled; }
+ set { m_XlsxEnabled = value; }
+ }
+
+ #endregion
+
+ #region ★★★★★ Class Event ★★★★★
+
+ public GridExcel(DataTable data, GridStyle style, bool xlsxEnabled, string file)
+ {
+ m_Data = data;
+ m_Style = style;
+ m_XlsxEnabled = xlsxEnabled;
+ m_File = file;
+ }
+
+ ~GridExcel()
+ {
+ Dispose(false);
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!m_Disposed) //一回だけ
+ {
+ if (disposing)
+ {
+ //Managed Resources
+ }
+
+ //Unmanaged resources
+ m_Disposed = true;
+ }
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ #endregion
+
+ #region ★★★★★ Control Event ★★★★★
+ #endregion
+
+ #region ★★★★★ Private Function ★★★★★
+ #endregion
+
+ #region ★★★★★ Public Function ★★★★★
+
+ public void Output()
+ {
+ string path = m_File + (m_XlsxEnabled ? ".xlsx" : ".xls");
+ Output(path);
+ //Process.Start(path);
+ CConvert.StartFile(path);
+ }
+
+ public void Output(string file)
+ {
+ using (FileStream stream = new FileStream(file, FileMode.Create, FileAccess.Write))
+ {
+ IWorkbook wb = null;
+ if (m_XlsxEnabled) { wb = new XSSFWorkbook(); } else { wb = new HSSFWorkbook(); }
+ ISheet sheet = wb.CreateSheet("Sheet1");
+ ICreationHelper cH = wb.GetCreationHelper();
+
+ // Create a new font and alter it.
+ IFont font = wb.CreateFont();
+ font.FontHeightInPoints = (short)m_Style.Font.SizeInPoints;
+ font.FontName = m_Style.Font.Name;
+
+ //center
+ ICellStyle style = wb.CreateCellStyle();
+ style.SetFont(font);
+ style.BorderBottom = BorderStyle.Thin;
+ style.BottomBorderColor = IndexedColors.Black.Index;
+ style.BorderLeft = BorderStyle.Thin;
+ style.LeftBorderColor = IndexedColors.Black.Index;
+ style.BorderRight = BorderStyle.Thin;
+ style.RightBorderColor = IndexedColors.Black.Index;
+ style.BorderTop = BorderStyle.Thin;
+ style.TopBorderColor = IndexedColors.Black.Index;
+ style.Alignment = HorizontalAlignment.Center;
+ style.VerticalAlignment = VerticalAlignment.Center;
+
+ //left
+ ICellStyle style1 = wb.CreateCellStyle();
+ style1.SetFont(font);
+ style1.BorderBottom = BorderStyle.Thin;
+ style1.BottomBorderColor = IndexedColors.Black.Index;
+ style1.BorderLeft = BorderStyle.Thin;
+ style1.LeftBorderColor = IndexedColors.Black.Index;
+ style1.BorderRight = BorderStyle.Thin;
+ style1.RightBorderColor = IndexedColors.Black.Index;
+ style1.BorderTop = BorderStyle.Thin;
+ style1.TopBorderColor = IndexedColors.Black.Index;
+ style1.Alignment = HorizontalAlignment.Left;
+ style1.VerticalAlignment = VerticalAlignment.Center;
+
+ //right
+ ICellStyle style3 = wb.CreateCellStyle();
+ style3.SetFont(font);
+ style3.Alignment = HorizontalAlignment.Right;
+ style3.VerticalAlignment = VerticalAlignment.Bottom;
+
+ IFont font18 = wb.CreateFont();
+ font18.FontHeightInPoints = (short)18;
+ font18.FontName = m_Style.Font.Name;
+
+ ICellStyle style2 = wb.CreateCellStyle();
+ style2.SetFont(font18);
+ style2.Alignment = HorizontalAlignment.Left;
+ style2.VerticalAlignment = VerticalAlignment.Center;
+
+ IRow row = sheet.CreateRow(0);
+ ICell cell = row.CreateCell(0);
+ cell.SetCellValue("データ一覧");
+ cell.CellStyle = style2;
+
+ cell = row.CreateCell(m_Style.ColumnStyle.Count - 1);
+ cell.SetCellValue(DateTime.Now.ToString("yyyy年MM月dd日(ddd) HH:mm:ss"));
+ cell.CellStyle = style3;
+
+ //タイトル
+ row = sheet.CreateRow(1);
+ //row.HeightInPoints = 16;
+ int col = 0;
+ foreach (ColumnStyle cs in m_Style.ColumnStyle)
+ {
+ cell = row.CreateCell(col);
+ cell.CellStyle = style;
+ if (cs.MaxCharLen < GeneralSub.GetStrLenB(cs.Text)) { cs.MaxCharLen = GeneralSub.GetStrLenB(cs.Text); }
+ cell.SetCellValue(cH.CreateRichTextString(cs.Text));
+ col++;
+ }
+
+ //データ
+ for (int i = 0; i < m_Data.Rows.Count; i++)
+ {
+ row = sheet.CreateRow(i + 2);
+ //row.HeightInPoints = 16;
+ col = 0;
+ foreach (ColumnStyle cs in m_Style.ColumnStyle)
+ {
+ cell = row.CreateCell(col);
+ if (cs.DefaultCellStyle != null)
+ {
+ if (cs.DefaultCellStyle.Alignment == StringAlignment.Center)
+ {
+ cell.CellStyle = style;
+ }
+ else
+ {
+ cell.CellStyle = style1;
+ }
+ }
+ string text = m_Data.Rows[i][cs.DataField].ToString();
+ if (cs.MaxCharLen < GeneralSub.GetStrLenB(text)) { cs.MaxCharLen = GeneralSub.GetStrLenB(text); }
+ cell.SetCellValue(cH.CreateRichTextString(text));
+ col++;
+ }
+ }
+
+ //fit
+ col = 0;
+ foreach (ColumnStyle cs in m_Style.ColumnStyle)
+ {
+ sheet.SetColumnWidth(col, (int)((cs.MaxCharLen + 0.72) * 256));
+ //sheet.AutoSizeColumn(col);
+ col++;
+ }
+ wb.Write(stream, true);
+ }
+ }
+
+ /// <summary>
+ /// 横水平方向
+ /// </summary>
+ /// <param name="align"></param>
+ /// <returns></returns>
+ public HorizontalAlignment ToHorizontalAlignment(StringAlignment align)
+ {
+ HorizontalAlignment ag = HorizontalAlignment.Center;
+ switch (align)
+ {
+ case StringAlignment.Center:
+ ag = HorizontalAlignment.Center;
+ break;
+ case StringAlignment.Near:
+ ag = HorizontalAlignment.Left;
+ break;
+ case StringAlignment.Far:
+ ag = HorizontalAlignment.Right;
+ break;
+ }
+ return ag;
+ }
+
+ /// <summary>
+ /// 縦垂直方向
+ /// </summary>
+ /// <param name="align"></param>
+ /// <returns></returns>
+ public VerticalAlignment ToVerticalAlignment(StringAlignment align)
+ {
+ VerticalAlignment ag = VerticalAlignment.Center;
+ switch (align)
+ {
+ case StringAlignment.Center:
+ ag = VerticalAlignment.Center;
+ break;
+ case StringAlignment.Near:
+ ag = VerticalAlignment.Top;
+ break;
+ case StringAlignment.Far:
+ ag = VerticalAlignment.Bottom;
+ break;
+ }
+ return ag;
+ }
+
+ #endregion
+
+ }
+}
--
Gitblit v1.10.0