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/Util/NPOIExcel.cs | 400 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 400 insertions(+), 0 deletions(-)
diff --git a/HotelPms.Share.Windows/Util/NPOIExcel.cs b/HotelPms.Share.Windows/Util/NPOIExcel.cs
new file mode 100644
index 0000000..da3c925
--- /dev/null
+++ b/HotelPms.Share.Windows/Util/NPOIExcel.cs
@@ -0,0 +1,400 @@
+using NPOI.HSSF.UserModel;
+using NPOI.SS.UserModel;
+using NPOI.XSSF.UserModel;
+
+namespace HotelPms.Share.Windows.Util
+{
+ public class NPOIExcel : IDisposable
+ {
+ #region ★★★★★ Declartions ★★★★★
+
+ private bool m_Disposed = false;
+ private bool m_IsEditting = false;
+
+ #endregion
+
+ #region ★★★★★ Property ★★★★★
+
+ /// <summary>
+ /// 絶対パス
+ /// </summary>
+ public string FileName { get; set; } = string.Empty;
+
+ /// <summary>
+ /// 現在のWorkbook
+ /// </summary>
+ public IWorkbook Workbook { get; set; } = null;
+
+ /// <summary>
+ /// 選択されたSheet
+ /// </summary>
+ public ISheet Sheet { get; set; } = null;
+
+ /// <summary>
+ /// Excel2003前?
+ /// </summary>
+ public bool XlsMode { get; set; } = false;
+
+ #endregion
+
+ #region ★★★★★ Class Event ★★★★★
+
+ public NPOIExcel(string fileName)
+ {
+ FileName = fileName;
+ FileInfo fileInfo = new FileInfo(FileName);
+ XlsMode = (fileInfo.Extension == ".xls");
+
+ if (System.IO.File.Exists(FileName))
+ {
+ using (FileStream file = new FileStream(FileName, FileMode.Open, FileAccess.Read))
+ {
+ Workbook = XlsMode ? new HSSFWorkbook(file) : new XSSFWorkbook(file);
+ }
+ Sheet = Workbook.GetSheetAt(0);
+ Sheet.ForceFormulaRecalculation = true;
+ }
+ else
+ {
+ Workbook = XlsMode ? new HSSFWorkbook() : new XSSFWorkbook();
+ Sheet = Workbook.CreateSheet("Sheet1"); //シートの作成
+ }
+ }
+
+ ~NPOIExcel()
+ {
+ Dispose(false);
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!m_Disposed) //一回だけ
+ {
+ if (disposing)
+ {
+ if (m_IsEditting) { Save(); }
+ //Managed Resources
+ }
+
+ //Unmanaged resources
+ m_Disposed = true;
+ }
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ #endregion
+
+ #region ★★★★★ Private Function ★★★★★
+
+ private string GetCellFormat(ICell cell)
+ {
+ IDataFormat df = XlsMode ? new HSSFDataFormat((Workbook as HSSFWorkbook).Workbook) : new XSSFDataFormat((Workbook as XSSFWorkbook).GetStylesSource());
+ return df.GetFormat(cell.CellStyle.DataFormat);
+ }
+
+
+ #endregion
+
+ #region ★★★★★ Public Function ★★★★★
+
+ /// <summary>
+ /// シート変換
+ /// </summary>
+ /// <param name="sheetIdx"></param>
+ public void SetCurrentSheet(int sheetIdx)
+ {
+ Sheet = Workbook.GetSheetAt(sheetIdx);
+ Sheet.ForceFormulaRecalculation = true;
+ }
+
+ /// <summary>
+ /// 存在しない時、null
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <returns></returns>
+ public ICell? GetCell(string colRowValue)
+ {
+ return GetCell(colRowValue, false);
+ }
+
+ public object? GetCellValue(string colRowValue)
+ {
+ try
+ {
+ ICell cell = GetCell(colRowValue);
+ if (cell == null) { return string.Empty; }
+ System.Diagnostics.Debug.WriteLine($"{colRowValue}.CellType={cell.CellType}");
+ if (cell.CellType == CellType.Numeric) { return cell.NumericCellValue; }
+ else if (cell.CellType == CellType.Boolean) { return cell.BooleanCellValue; }
+ else { return cell.StringCellValue; }
+ }
+ catch
+ {
+ return string.Empty;
+ }
+ }
+
+ public string? GetCellForceString(string colRowValue)
+ {
+ try
+ {
+ object ret = GetCellValue(colRowValue);
+ return ret == null ? string.Empty : ret.ToString();
+ }
+ catch
+ {
+ return string.Empty;
+ }
+ }
+
+ /// <summary>
+ /// セルの値を取得する
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <returns></returns>
+ public string GetCellString(string colRowValue)
+ {
+ try
+ {
+ ICell cell = GetCell(colRowValue);
+ if (cell == null) { return string.Empty; }
+ System.Diagnostics.Debug.WriteLine($"{colRowValue}={cell.StringCellValue}");
+ return cell.StringCellValue;
+ }
+ catch
+ {
+ return string.Empty;
+ }
+ }
+
+ public int GetCellInt(string colRowValue)
+ {
+ try
+ {
+ ICell cell = GetCell(colRowValue);
+ if (cell == null) { return 0; }
+ return (int)cell.NumericCellValue;
+ }
+ catch
+ {
+ return 0;
+ }
+ }
+
+ /// <summary>
+ /// 存在しない時、新規
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <returns></returns>
+ public ICell? GetCell(string colRowValue, bool newCell)
+ {
+ System.Drawing.Point p = GetCellPoint(colRowValue);
+ IRow row = Sheet.GetRow(p.Y);
+ if (row == null)
+ {
+ if (newCell) { row = Sheet.CreateRow(p.Y); } else { return null; }
+ }
+
+ ICell cell = row.GetCell(p.X);
+ if (cell == null)
+ {
+ if (newCell) { cell = row.CreateCell(p.X); } else { return null; }
+ }
+ return cell;
+ }
+
+ /// <summary>
+ /// フォントの作成
+ /// </summary>
+ /// <returns></returns>
+ public IFont CreateFont()
+ {
+ IFont font = Workbook.CreateFont();
+ return font;
+ }
+
+ /// <summary>
+ /// 計算式セット
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <param name="formula"></param>
+ public void SetCellFormula(string colRowValue, string formula)
+ {
+ m_IsEditting = true;
+ ICell cell = GetCell(colRowValue, true);
+ cell.SetCellFormula(formula);
+
+ }
+
+ /// <summary>
+ /// セルの値セット:xls専用
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <param name="richTextString"></param>
+ public void SetCell(string colRowValue, HSSFRichTextString richTextString)
+ {
+ m_IsEditting = true;
+ ICell cell = GetCell(colRowValue, true);
+ cell.SetCellValue(richTextString);
+ }
+
+ /// <summary>
+ /// セルの値セット:数字専用
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <param name="value"></param>
+ public void SetCell(string colRowValue, double value)
+ {
+ m_IsEditting = true;
+ ICell cell = GetCell(colRowValue, true);
+ cell.SetCellValue(value);
+ }
+
+ /// <summary>
+ /// セルの値セット:日付専用
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <param name="value"></param>
+ public void SetCell(string colRowValue, DateTime value)
+ {
+ m_IsEditting = true;
+ ICell cell = GetCell(colRowValue, true);
+ cell.SetCellValue(value);
+ }
+
+ /// <summary>
+ /// セルの値セット:Boolean
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <param name="value"></param>
+ public void SetCell(string colRowValue, bool value)
+ {
+ m_IsEditting = true;
+ ICell cell = GetCell(colRowValue, true);
+ cell.SetCellValue(value);
+ }
+
+ /// <summary>
+ /// 数字型変換対応
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <param name="value"></param>
+ public void SetCell(string colRowValue, string value)
+ {
+ m_IsEditting = true;
+ System.Drawing.Point p = GetCellPoint(colRowValue);
+ IRow row = Sheet.GetRow(p.Y);
+ if (row == null) { row = Sheet.CreateRow(p.Y); }
+
+ ICell cell = row.GetCell(p.X);
+ if (cell == null) { cell = row.CreateCell(p.X); }
+
+ string format = GetCellFormat(cell);
+ if ((format.Contains("#") && format.Contains("0")) || format.Contains("0_"))
+ {
+ double val = 0;
+ if (double.TryParse(value, out val))
+ {
+ cell.SetCellValue(val);
+ }
+ else
+ {
+ cell.SetCellValue(value);
+ }
+ }
+ else
+ {
+ cell.SetCellValue(value);
+ }
+ }
+
+ /// <summary>
+ /// 保存
+ /// </summary>
+ public void Save()
+ {
+ //Write the stream data of workbook to the root directory
+ using (FileStream file = new FileStream(FileName, FileMode.Create))
+ {
+ Workbook.Write(file, true);
+ file.Close();
+ }
+ }
+
+ /// <summary> ExcelX位置→EXCEL列文字 (1→A,2→B,3→C,27→AA)
+ /// </summary>
+ /// <param name="ColNum">索引号</param>
+ /// <returns>string</returns>
+ public static string ToColName(int ColNum)
+ {
+ int ll_mod;
+ string ColName = "";
+
+ while (ColNum > 0)
+ {
+ ll_mod = ColNum % 26;
+ if (ll_mod == 0)
+ {
+ ColName = "Z" + ColName;
+ ll_mod = 1;
+ }
+ else
+ {
+ ColName = (Convert.ToChar(ll_mod + 64)).ToString() + ColName;
+ }
+ ColNum = (ColNum - ll_mod) / 26;
+ }
+
+ return ColName;
+ }
+
+ /// <summary> Excel列文字→ExcelX位置 ("A"→1、"AA"→27)
+ /// </summary>
+ /// <param name="ColName">列名</param>
+ /// <returns>int</returns>
+ public static int ToIndex(string ColName)
+ {
+ int ColIndex = 0;
+ for (int i = ColName.Length - 1; i >= 0; i--)
+ {
+ ColIndex += Convert.ToInt32(((int)ColName[i] - 64) * Math.Pow(26, (ColName.Length - 1) - i));
+ }
+
+ return ColIndex;
+ }
+
+
+ /// <summary> Excel文字→Excel位置("A1"→(0,0)、"B2"→(1,1))(0基準)
+ /// </summary>
+ /// <param name="colRowValue"></param>
+ /// <returns></returns>
+ public static System.Drawing.Point GetCellPoint(string colRowValue)
+ {
+ System.Drawing.Point point = new System.Drawing.Point(0, 0);
+ string colstr = string.Empty;
+ string rowStr = string.Empty;
+ for (int i = 0; i < colRowValue.Length; i++)
+ {
+ if (Char.IsNumber(colRowValue[i]))
+ {
+ rowStr += colRowValue[i].ToString();
+ }
+ else
+ {
+ colstr += colRowValue[i].ToString();
+ }
+ }
+
+ point.Y = Convert.ToInt32(rowStr) - 1; //行
+ point.X = ToIndex(colstr) - 1;
+ return point;
+ }
+
+ #endregion
+ }
+}
--
Gitblit v1.10.0