Excel常用操作封装
最近做了一个Excel相关的项目,需要读写Excel文件,所以对Excel的一些功能进行了封装,方便以后使用。
采用单子模式,这样可以防止打开多个Excel进程,不知道有没有道理。在程序的最后退出Excel进程。
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Excel;
using System.Drawing;
namespace 订单管理系统
{
public class ExcelHelper
{
private Excel.Application app;
private Workbooks wbs;
private ExcelHelper()
{
app = new Excel.Application();
if (app != null)
{
wbs = app.Workbooks;
}
else
{
throw new OrderManageSystemException("Excel couldn't be started.");
}
}
public Workbook Create()
{
return wbs.Add(XlWBATemplate.xlWBATWorksheet);
}
public Workbook Open(string fileName)
{
return wbs.Open(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
public Worksheet GetSheet(Workbook wb, string sheetName)
{
return wb.Sheets[sheetName] as Worksheet;
}
public Worksheet AddSheet(Workbook wb, string sheetName)
{
Worksheet sheet = wb.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing) as Worksheet;
sheet.Name = sheetName;
return sheet;
}
public void DeleteSheet(Workbook wb, string sheetName)
{
GetSheet(wb, sheetName).Delete();
}
public void DeleteSheet(Worksheet sheet)
{
sheet.Delete();
}
public Worksheet RenameSheet(Workbook wb, string oldSheetName, string newSheetName)
{
Worksheet sheet = GetSheet(wb, oldSheetName);
sheet.Name = newSheetName;
return sheet;
}
public Worksheet RenameSheet(Worksheet sheet, string sheetName)
{
sheet.Name = sheetName;
return sheet;
}
public void SetCellValue(Worksheet sheet, string cell, object value)
{
sheet.get_Range(cell, Type.Missing).Value2 = value;
}
public object GetCellValue(Worksheet sheet, string cell)
{
return sheet.get_Range(cell, Type.Missing).Value2;
}
public void SetFont(Worksheet sheet, object start, object end, string name, bool italic, bool bold, bool outlineFont, bool shadow, int size, bool strikethrough, bool underline, Color fontColor, bool outline)
{
Range range = sheet.get_Range(start, end);
range.Font.Name = name;
range.Font.Italic = italic;
range.Font.Bold = bold;
range.Font.Color = ColorTranslator.ToOle(fontColor);
range.Font.OutlineFont = outline;
range.Font.Shadow = shadow;
range.Font.Size = size;
range.Font.Strikethrough = strikethrough;
range.Font.Underline = underline;
}
public void SetBorders(Worksheet sheet, object start, object end, XlLineStyle lineStyle, XlBorderWeight weight, XlColorIndex colorIndex, Color color)
{
Range range = sheet.get_Range(start, end);
range.BorderAround(lineStyle, weight, colorIndex, ColorTranslator.ToOle(color));
}
public void SetTopBorder(Worksheet sheet, object start, object end, XlLineStyle lineStyle, XlBorderWeight weight, XlColorIndex colorIndex, Color color)
{
Range range = sheet.get_Range(start, end);
Border border = range.Borders.get_Item(XlBordersIndex.xlEdgeTop);
border.LineStyle = lineStyle;
border.ColorIndex = colorIndex;
border.Color = ColorTranslator.ToOle(color);
}
public void SetBoottomBorder(Worksheet sheet, object start, object end, XlLineStyle lineStyle, XlBorderWeight weight, XlColorIndex colorIndex, Color color)
{
Range range = sheet.get_Range(start, end);
Border border = range.Borders.get_Item(XlBordersIndex.xlEdgeBottom);
border.LineStyle = lineStyle;
border.ColorIndex = colorIndex;
border.Color = ColorTranslator.ToOle(color);
}
public void SetLeftBorder(Worksheet sheet, object start, object end, XlLineStyle lineStyle, XlBorderWeight weight, XlColorIndex colorIndex, Color color)
{
Range range = sheet.get_Range(start, end);
Border border = range.Borders.get_Item(XlBordersIndex.xlEdgeLeft);
border.LineStyle = lineStyle;
border.ColorIndex = colorIndex;
border.Color = ColorTranslator.ToOle(color);
}
public void SetRightBorder(Worksheet sheet, object start, object end, XlLineStyle lineStyle, XlBorderWeight weight, XlColorIndex colorIndex, Color color)
{
Range range = sheet.get_Range(start, end);
Border border = range.Borders.get_Item(XlBordersIndex.xlEdgeRight);
border.LineStyle = lineStyle;
border.ColorIndex = colorIndex;
border.Color = ColorTranslator.ToOle(color);
}
public void SetAlignment(Worksheet sheet, object start, object end, XlHAlign horizontalAlignment, XlVAlign verticalAlignment)
{
Range range = sheet.get_Range(start, end);
range.HorizontalAlignment = horizontalAlignment;
range.VerticalAlignment = verticalAlignment;
}
public void SetOtherProperty(Worksheet sheet, object start, object end, int rowHeight, int columnWidth, bool autofit, bool wrapText, Color interiorColor)
{
Range range = sheet.get_Range(start, end);
range.RowHeight = rowHeight;
range.ColumnWidth = columnWidth;
if (autofit)
{
range.AutoFit();
}
range.WrapText = wrapText;
range.Interior.Color = ColorTranslator.ToOle(interiorColor);
}
public void Merge(Worksheet sheet, object start, object end)
{
Range range = sheet.get_Range(start, end);
range.Merge(Type.Missing);
}
public void SaveAs(Workbook wb, string fileName)
{
wb.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
public void Save(Workbook wb)
{
wb.Save();
}
public void Close(Workbook wb)
{
wb.Close(Type.Missing, Type.Missing, Type.Missing);
}
~ExcelHelper()
{
for (int i = 0; i < wbs.Count; i++)
{
Close(wbs.get_Item(i));
}
wbs.Close();
wbs = null;
app = null;
GC.Collect();
}
public static ExcelHelper Instance
{
get
{
return Nested.instance;
}
}
private class Nested
{
internal static readonly ExcelHelper instance = new ExcelHelper();
}
}
}
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小橋流水(包含链接)。如您有任何疑问或者授权方面的协商,请给我发邮件。