因爲開發中很多時候都會用到Excel讀寫功能爲了簡化操作而設計的一個對Excel操作的簡化抽象類
using Excel = Microsoft.Office.Interop.Excel;
/// <summary>
/// Excel 操作工具 For .Net Framework 4.0
/// </summary>
public abstract class AbstractExcelUtil
{
#region --- 內部字段 Begin ---
/// <summary>
/// Excel 程序載體
/// </summary>
Excel.Application excelApp = null;
/// <summary>
/// Excel 工作本
/// </summary>
Excel.Workbook excelWorkbook = null;
/// <summary>
/// Excel 單元表
/// </summary>
Excel.Worksheet excelWorksheel = null;
#endregion --- 內部字段 End ---
#region --- Ctor Begin ---
/// <summary>
/// 構造方法
/// </summary>
public AbstractExcelUtil()
{
}
#endregion --- Ctor End ---
#region --- 基本方法 Begin ---
/// <summary>
/// 創建 Excel 工作本
/// </summary>
protected void CreateWorkbook()
{
excelApp = new Excel.Application();
excelWorkbook = excelApp.Application.Workbooks.Add();
}
/// <summary>
/// 打開現有的 Excel 工作本
/// </summary>
/// <param name="filePath">工作本路徑</param>
protected void OpenWorkbook(string filePath)
{
excelApp = new Excel.Application();
excelWorkbook = excelApp.Application.Workbooks.Open(filePath);
}
/// <summary>
/// 添加一個Worksheet
/// </summary>
/// <param name="sheelName">Worksheel 名稱</param>
/// <returns>成功返回True表示添加Worksheel成功,失敗返回False表示添加Worksheel失敗輸入參數sheelName不正確、沒有創建 Excel 工作本 </returns>
protected bool AddWorksheet(string sheelName)
{
if (string.IsNullOrWhiteSpace(sheelName) == true)
{
return false;
}
if (excelWorkbook == null)
{
return false;
}
excelWorksheel = (Excel.Worksheet)excelWorkbook.Worksheets.Add();
excelWorksheel.Name = sheelName;
return true;
}
/// <summary>
/// 設定當前工作表
/// </summary>
/// <param name="sheelIndex">工作表索引</param>
protected void SetWorksheet(int sheelIndex)
{
excelWorksheel = (Excel.Worksheet)excelWorkbook.Worksheets[sheelIndex];
}
/// <summary>
/// 設定當前工作表
/// </summary>
/// <param name="sheelName">工作表名稱</param>
protected void SetWorksheet(string sheelName)
{
foreach (Excel.Worksheet item in excelWorkbook.Worksheets)
{
if (item.Name.Equals(sheelName) == true)
{
excelWorksheel = item;
break;
}
}
}
/// <summary>
/// 給單元格賦值
/// </summary>
/// <param name="rowIndex">行</param>
/// <param name="columnIndex">列</param>
/// <param name="value">值</param>
protected void SetCellValue(int rowIndex, int columnIndex, object value)
{
excelWorksheel.Cells[rowIndex, columnIndex] = value;
}
/// <summary>
/// 獲取單元格的值
/// </summary>
/// <param name="rowIndex">行</param>
/// <param name="columnIndex">列</param>
/// <returns>單元格的值</returns>
protected dynamic GetCellValue(int rowIndex, int columnIndex)
{
return ((Excel.Range)excelWorksheel.Cells[rowIndex, columnIndex]).Value;
}
/// <summary>
/// 獲取單元格的數值類型的值【int、double、DateTime、Currency等類型】
/// </summary>
/// <param name="rowIndex">行</param>
/// <param name="columnIndex">列</param>
/// <returns>單元格的值</returns>
protected dynamic GetCellValue2(int rowIndex, int columnIndex)
{
return ((Excel.Range)excelWorksheel.Cells[rowIndex, columnIndex]).Value2;
}
/// <summary>
/// 獲取單元格
/// </summary>
/// <param name="rowIndex">行</param>
/// <param name="columnIndex">列</param>
/// <returns>返回當前單元格</returns>
protected Excel.Range GetCell(int rowIndex, int columnIndex)
{
return (Excel.Range)excelWorksheel.Cells[rowIndex, columnIndex];
}
/// <summary>
/// 合拼單元格
/// </summary>
/// <param name="rowIndex1">起始單格的行</param>
/// <param name="columnIndex1">起始單格的列</param>
/// <param name="rowIndex2">結束單格的行</param>
/// <param name="columnIndex2">結束單格的列</param>
/// <returns>返回合拼後的單元格</returns>
protected Excel.Range MergerCells(int rowIndex1, int columnIndex1, int rowIndex2, int columnIndex2)
{
Excel.Range range = excelWorksheel.Range[excelWorksheel.Cells[rowIndex1, columnIndex1], excelWorksheel.Cells[rowIndex2, columnIndex2]];
range.MergeCells = true;
return range;
}
/// <summary>
/// 合拼單元格
/// </summary>
/// <param name="startCell">起始單格</param>
/// <param name="endCell">結束單格</param>
/// <returns>返回合拼後的單元格</returns>
protected Excel.Range MergerCells(Excel.Range startCell, Excel.Range endCell)
{
Excel.Range range = excelWorksheel.Range[startCell, endCell];
range.MergeCells = true;
return range;
}
/// <summary>
/// 保存文件並關閉對象
/// </summary>
/// <param name="filePath">保存文件路徑</param>
/// <returns>成功返回True表示保存成功,失敗返回False表示輸入參數filePath不正確</returns>
protected bool SaveAndCloseWorkbook(string filePath)
{
if (string.IsNullOrWhiteSpace(filePath) == true)
{
return false;
}
excelWorkbook.SaveAs(filePath);
excelWorkbook.Close();
excelApp.Quit();
return true;
}
/// <summary>
/// 釋放所有 Excel 進程
/// </summary>
/// <returns>成功返回True表示已經釋放所有 Excel 進程,失敗返回False表示釋放所有 Excel 進程發生錯誤</returns>
protected bool KillAllExcel()
{
try
{
if (excelApp == null)
{
return true;
}
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
{
if (process.CloseMainWindow() == false)
{
process.Kill();
}
}
excelApp = null;
return true;
}
catch
{
return false;
}
}
#endregion --- 基本方法 End ---
}