using System.Collections.Generic;
using System.Text;
using OfficeExcel = Microsoft.Office.Interop.Excel;
namespace Core.File.Excel
{
/// <summary>
/// ExcelのBookアクセサー
/// </summary>
public class BookAccessor : BaseExcelAccessor
{
#region 構築・破棄
/// <summary>
/// コンストラクタ
/// </summary>
/// <param name="workbook"></param>
/// <param name="application">ExcelApplicationアクセサー</param>
private BookAccessor(OfficeExcel.Workbook workbook, ExcelAccessor application)
:base(application)
{
Workbook = workbook;
}
/// <summary>
/// 構成子
/// </summary>
/// <param name="workbook"></param>
/// <param name="application">ExcelApplicationアクセサー</param>
/// <returns></returns>
internal static BookAccessor GetAccessor(OfficeExcel.Workbook workbook, ExcelAccessor application)
{
return new BookAccessor(workbook, application);
}
#endregion
#region プロパティ
/// <summary>Workbook</summary>
private OfficeExcel.Workbook Workbook { get; set; }
/// <summary>Sheets</summary>
private OfficeExcel.Sheets sheets;
/// <summary>Sheets</summary>
private OfficeExcel.Sheets Sheets
{
get
{
if (this.sheets == null)
{
this.sheets = Workbook.Sheets;
ReleaseComObjects.Add(this.sheets);
}
return this.sheets;
}
}
/// <summary>フルネーム</summary>
public string FullName
{
get
{
return Workbook.FullName;
}
}
/// <summary>ファイル名</summary>
public string Name
{
get
{
return Workbook.Name;
}
}
/// <summary>パス</summary>
public string Path
{
get
{
return Workbook.Path;
}
}
#endregion
#region WorkBook
/// <summary>
/// 保存
/// </summary>
public void Save()
{
Workbook.Save();
}
/// <summary>
/// 名前を付けて保存
/// </summary>
/// <param name="absolutePath">絶対パス</param>
public void SaveAs(string absolutePath)
{
Workbook.SaveAs(ConvertIllegalBookName(absolutePath));
}
/// <summary>
/// 禁則文字変換
/// 1 )コロン :
/// 2 )角カッコ [ ]
/// </summary>
/// <param name="name"></param>
public string ConvertIllegalBookName(string name)
{
StringBuilder sb = new StringBuilder();
sb.Append(System.IO.Path.GetDirectoryName(name));
sb.Append(@"\");
string tmp = System.IO.Path.GetFileNameWithoutExtension(name);
tmp = tmp.Replace(@":", "");
tmp = tmp.Replace(@":", "");
tmp = tmp.Replace(@"[", "");
tmp = tmp.Replace(@"[", "");
tmp = tmp.Replace(@"]", "");
tmp = tmp.Replace(@"]", "");
sb.Append(tmp);
sb.Append(System.IO.Path.GetExtension(name));
return sb.ToString();
}
/// <summary>
/// 閉じる
/// </summary>
/// <param name="saveChanges">true:変更を保存して閉じる</param>
public void Close(bool saveChanges = false)
{
Workbook.Close(saveChanges);
}
#endregion
#region Worksheet
/// <summary>
/// Sheet取得
/// </summary>
/// <param name="index">インデックス</param>
/// <returns></returns>
public SheetAccessor GetSheet(int index)
{
OfficeExcel.Worksheet worksheet = Sheets[index];
// 解放COMオブジェクト追加
ReleaseComObjects.Add(worksheet);
return SheetAccessor.GetAccessor(worksheet, Application);
}
/// <summary>
/// Sheet取得
/// </summary>
/// <param name="name">名前</param>
/// <returns></returns>
public SheetAccessor GetSheet(string name)
{
foreach(OfficeExcel.Worksheet worksheet in Sheets)
{
// 解放COMオブジェクト追加
ReleaseComObjects.Add(worksheet);
if (worksheet.Name.Equals(name))
{
return SheetAccessor.GetAccessor(worksheet, Application);
}
}
throw new KeyNotFoundException();
}
/// <summary>
/// Sheetを追加
/// </summary>
/// <returns></returns>
public SheetAccessor AddSheet()
{
OfficeExcel.Worksheet lastWorksheet = Sheets[Sheets.Count];
// 解放COMオブジェクト追加
ReleaseComObjects.Add(lastWorksheet);
OfficeExcel.Worksheet worksheet = Sheets.Add(System.Type.Missing, lastWorksheet, System.Type.Missing, System.Type.Missing);
// 解放COMオブジェクト追加
ReleaseComObjects.Add(worksheet);
return SheetAccessor.GetAccessor(worksheet, Application);
}
/// <summary>
/// Sheetを追加
/// </summary>
/// <param name="name">名前</param>
/// <returns></returns>
public SheetAccessor AddSheet(string name)
{
SheetAccessor sheet = AddSheet();
sheet.Name = ConvertIllegalSheetName(name);
return sheet;
}
/// <summary>
/// 禁則文字変換
/// 1 )コロン :
/// 2 )円記号 ¥
/// 3 )疑問符 ?
/// 4 )角カッコ [ ]
/// 5 )スラッシュ /
/// 6 )アスタリスク *
/// </summary>
/// <param name="name"></param>
public string ConvertIllegalSheetName(string name)
{
string tmp = name;
tmp = tmp.Replace(@":", "");
tmp = tmp.Replace(@":", "");
tmp = tmp.Replace(@"\", "");
tmp = tmp.Replace(@"¥", "");
tmp = tmp.Replace(@"?", "");
tmp = tmp.Replace(@"?", "");
tmp = tmp.Replace(@"[", "");
tmp = tmp.Replace(@"[", "");
tmp = tmp.Replace(@"]", "");
tmp = tmp.Replace(@"]", "");
tmp = tmp.Replace(@"/", "");
tmp = tmp.Replace(@"/", "");
tmp = tmp.Replace(@"*", "");
tmp = tmp.Replace(@"*", "");
return tmp;
}
#endregion
}
}
0 件のコメント:
コメントを投稿