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 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小橋流水(包含链接)。如您有任何疑问或者授权方面的协商,请给我发邮件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述