| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OTSMeasureApp{    /// <SUMMARY>    /// C#操作Excel类,更新日期2018-8-28,补充部份操作功能,后续功能在使用需要再进行完善    /// </SUMMARY>    public class ExcelEdit    {        #region 变量定义        /// <summary>        /// excel的文件名        /// </summary>        public string m_Filename;        public Microsoft.Office.Interop.Excel.Application m_app;        public Microsoft.Office.Interop.Excel.Workbooks m_wbs;        public Microsoft.Office.Interop.Excel.Workbook m_wb;        public Microsoft.Office.Interop.Excel.Worksheets m_wss;        public Microsoft.Office.Interop.Excel.Worksheet m_ws;        /// <summary>        /// 使用的Excel版本号        /// </summary>        public int m_FormatNum = -4143;        #endregion        #region 构造函数        /// <summary>        /// 构造函数        /// </summary>        public ExcelEdit()        {            //            // TODO: 在此处添加构造函数逻辑            //        }        #endregion        #region 文件操作        /// <summary>        /// 创建一个Microsoft.Office.Interop.Excel对象        /// </summary>        public void Create()        {            m_app = new Microsoft.Office.Interop.Excel.Application();            m_wbs = m_app.Workbooks;            if (Convert.ToDouble(m_app.Version) < 12)            {                m_FormatNum = -4143;            }            else            {                m_FormatNum = 56;            }            m_wb = m_wbs.Add(true);        }        /// <summary>        /// 打开一个Microsoft.Office.Interop.Excel文件        /// </summary>        /// <param name="FileName"></param>        public void Open(string FileName)        {            m_app = new Microsoft.Office.Interop.Excel.Application();            m_wbs = m_app.Workbooks;            m_wb = m_wbs.Add(FileName);            //wb = wbs.Open(FileName, 0, true, 5,"", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "t", false, false, 0, true,Type.Missing,Type.Missing);            //wb = wbs.Open(FileName,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);            m_Filename = FileName;        }        /// <summary>        /// 保存文档        /// </summary>        /// <returns></returns>        public bool Save()        {            if (m_Filename == "")            {                return false;            }            else            {                try                {                    m_wb.Save();                    return true;                }                catch (Exception ex)                {                    string str = ex.ToString();                    return false;                }            }        }        /// <summary>        /// 文档另存为        /// </summary>        /// <param name="FileName"></param>        /// <returns></returns>        public bool SaveAs(object FileName)        {            try            {                m_wb.SaveAs(FileName, m_FormatNum, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);                return true;            }            catch (Exception ex)            {                string str = ex.ToString();                return false;            }        }        /// <summary>        /// 文档保存为PDF格式        /// </summary>        /// <param name="FileName"></param>        /// <returns></returns>        public bool SaveAsPDF(string FileName)        {            try            {                //转PDF部份,好用是好用,但是格式不好控制                m_ws.PageSetup.Zoom = false;//只有该项为false时,下面的才有效                m_ws.PageSetup.FitToPagesWide = 1;                m_ws.PageSetup.FitToPagesTall = false;                m_ws.PageSetup.Orientation = Microsoft.Office.Interop.Excel.XlPageOrientation.xlLandscape;                m_ws.PageSetup.PaperSize = Microsoft.Office.Interop.Excel.XlPaperSize.xlPaperA4;                m_wb.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF,                    FileName + ".pdf",                    Microsoft.Office.Interop.Excel.XlFixedFormatQuality.xlQualityStandard,                    Type.Missing,                    false,                    Type.Missing,                    Type.Missing,                    false,                    Type.Missing);                return true;            }            catch (Exception ex)            {                string str = ex.ToString();                return false;            }        }        /// <summary>        /// 关闭一个Microsoft.Office.Interop.Excel对象,销毁对象        /// </summary>        public void Close()        {            m_wb.Close(Type.Missing, Type.Missing, Type.Missing);            m_wbs.Close();            m_app.Quit();            m_wb = null;            m_wbs = null;            m_app = null;            GC.Collect();        }        #endregion        #region 工作表相关        /// <summary>        /// 获取一个工作表        /// </summary>        /// <param name="SheetName"></param>        /// <returns></returns>        public Microsoft.Office.Interop.Excel.Worksheet GetSheet(string SheetName)        {            Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)m_wb.Worksheets[SheetName];            return s;        }        /// <summary>        /// 添加一个工作表        /// </summary>        /// <param name="SheetName"></param>        /// <returns></returns>        public Microsoft.Office.Interop.Excel.Worksheet AddSheet(string SheetName)        {            Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)m_wb.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);            s.Name = SheetName;            return s;        }        /// <summary>        /// 删除一个工作表        /// </summary>        /// <param name="SheetName"></param>        public void DelSheet(string SheetName)        {            ((Microsoft.Office.Interop.Excel.Worksheet)m_wb.Worksheets[SheetName]).Delete();        }        /// <summary>        /// 重命名一个工作表        /// </summary>        /// <param name="OldSheetName"></param>        /// <param name="NewSheetName"></param>        /// <returns></returns>        public Microsoft.Office.Interop.Excel.Worksheet ReNameSheet(string OldSheetName, string NewSheetName)        {            Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)m_wb.Worksheets[OldSheetName];            s.Name = NewSheetName;            return s;        }        /// <summary>        /// 重命名一个工作表        /// </summary>        /// <param name="Sheet"></param>        /// <param name="NewSheetName"></param>        /// <returns></returns>        public Microsoft.Office.Interop.Excel.Worksheet ReNameSheet(Microsoft.Office.Interop.Excel.Worksheet Sheet, string NewSheetName)        {            Sheet.Name = NewSheetName;            return Sheet;        }        #endregion        #region 单元格相关        /// <summary>        /// 向单元格中设置值,ws:要设值的工作表     X行Y列     value   值        /// </summary>        /// <param name="ws"></param>        /// <param name="x"></param>        /// <param name="y"></param>        /// <param name="value"></param>        public void SetCellValue(Microsoft.Office.Interop.Excel.Worksheet ws, int x, int y, object value)        {            ws.Cells[x, y] = value;        }        /// <summary>        /// ws:要设值的工作表的名称 X行Y列 value 值        /// </summary>        /// <param name="ws"></param>        /// <param name="x"></param>        /// <param name="y"></param>        /// <param name="value"></param>        public void SetCellValue(string ws, int x, int y, object value)        {            GetSheet(ws).Cells[x, y] = value;        }        /// <summary>        /// 设置一个单元格的属性   字体,   大小,颜色   ,对齐方式        /// </summary>        /// <param name="ws"></param>        /// <param name="Startx"></param>        /// <param name="Starty"></param>        /// <param name="Endx"></param>        /// <param name="Endy"></param>        /// <param name="size"></param>        /// <param name="name"></param>        /// <param name="color"></param>        /// <param name="HorizontalAlignment"></param>        public void SetCellProperty(Microsoft.Office.Interop.Excel.Worksheet ws, int Startx, int Starty, int Endx, int Endy, int size, string name, Microsoft.Office.Interop.Excel.Constants color, Microsoft.Office.Interop.Excel.Constants HorizontalAlignment)        {            name = "宋体";            size = 12;            color = Microsoft.Office.Interop.Excel.Constants.xlAutomatic;            HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlRight;            ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;            ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;            ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;            ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;        }        /// <summary>        /// 设置单元格的属性        /// </summary>        /// <param name="wsn"></param>        /// <param name="Startx"></param>        /// <param name="Starty"></param>        /// <param name="Endx"></param>        /// <param name="Endy"></param>        /// <param name="size"></param>        /// <param name="name"></param>        /// <param name="color"></param>        /// <param name="HorizontalAlignment"></param>        public void SetCellProperty(string wsn, int Startx, int Starty, int Endx, int Endy, int size, string name, Microsoft.Office.Interop.Excel.Constants color, Microsoft.Office.Interop.Excel.Constants HorizontalAlignment)        {            Microsoft.Office.Interop.Excel.Worksheet ws = GetSheet(wsn);            ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;            ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;            ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;            ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;        }        /// <summary>        /// 合并单元格        /// </summary>        /// <param name="ws"></param>        /// <param name="x1"></param>        /// <param name="y1"></param>        /// <param name="x2"></param>        /// <param name="y2"></param>        public void UniteCells(Microsoft.Office.Interop.Excel.Worksheet ws, int x1, int y1, int x2, int y2)        {            ws.get_Range(ws.Cells[x1, y1], ws.Cells[x2, y2]).Merge(Type.Missing);        }        /// <summary>        /// 合并单元格        /// </summary>        /// <param name="ws"></param>        /// <param name="x1"></param>        /// <param name="y1"></param>        /// <param name="x2"></param>        /// <param name="y2"></param>        public void UniteCells(string ws, int x1, int y1, int x2, int y2)        {            GetSheet(ws).get_Range(GetSheet(ws).Cells[x1, y1], GetSheet(ws).Cells[x2, y2]).Merge(Type.Missing);        }        #endregion        #region 内存中操作相关        /// <summary>        /// 将内存中数据表格插入到Microsoft.Office.Interop.Excel指定工作表的指定位置 为在使用模板时控制格式时使用一        /// </summary>        /// <param name="dt"></param>        /// <param name="ws"></param>        /// <param name="startX"></param>        /// <param name="startY"></param>        public void InsertTable(System.Data.DataTable dt, string ws, int startX, int startY)        {            for (int i = 0; i <= dt.Rows.Count - 1; i++)            {                for (int j = 0; j <= dt.Columns.Count - 1; j++)                {                    GetSheet(ws).Cells[startX + i, j + startY] = dt.Rows[i][j].ToString();                }            }        }        /// <summary>        /// 将内存中数据表格插入到Microsoft.Office.Interop.Excel指定工作表的指定位置二        /// </summary>        /// <param name="dt"></param>        /// <param name="ws"></param>        /// <param name="startX"></param>        /// <param name="startY"></param>        public void InsertTable(System.Data.DataTable dt, Microsoft.Office.Interop.Excel.Worksheet ws, int startX, int startY)        {            for (int i = 0; i <= dt.Rows.Count - 1; i++)            {                for (int j = 0; j <= dt.Columns.Count - 1; j++)                {                    ws.Cells[startX + i, j + startY] = dt.Rows[i][j];                }            }        }        /// <summary>        /// 将内存中数据表格添加到Microsoft.Office.Interop.Excel指定工作表的指定位置一        /// </summary>        /// <param name="dt"></param>        /// <param name="ws"></param>        /// <param name="startX"></param>        /// <param name="startY"></param>        public void AddTable(System.Data.DataTable dt, string ws, int startX, int startY)        {            for (int i = 0; i <= dt.Rows.Count - 1; i++)            {                for (int j = 0; j <= dt.Columns.Count - 1; j++)                {                    GetSheet(ws).Cells[i + startX, j + startY] = dt.Rows[i][j];                }            }        }        /// <summary>        /// 将内存中数据表格添加到Microsoft.Office.Interop.Excel指定工作表的指定位置二        /// </summary>        /// <param name="dt"></param>        /// <param name="ws"></param>        /// <param name="startX"></param>        /// <param name="startY"></param>        public void AddTable(System.Data.DataTable dt, Microsoft.Office.Interop.Excel.Worksheet ws, int startX, int startY)        {            for (int i = 0; i <= dt.Rows.Count - 1; i++)            {                for (int j = 0; j <= dt.Columns.Count - 1; j++)                {                    ws.Cells[i + startX, j + startY] = dt.Rows[i][j];                }            }        }        #endregion        #region 图片操作相关        /// <summary>        /// 插入图片操作        /// </summary>        /// <param name="Filename"></param>        /// <param name="ws"></param>        public void InsertPictures(string Filename, string ws)        {            GetSheet(ws).Shapes.AddPicture(Filename, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 10, 10, 30, 30);        }        /// <summary>        /// 插入图片操作,重载        /// </summary>        /// <param name="Filename"></param>        /// <param name="ws"></param>        /// <param name="left"></param>        /// <param name="top"></param>        /// <param name="width"></param>        /// <param name="height"></param>        public void Insertpictures(string Filename, string ws, float left, float top, float width, float height)        {            GetSheet(ws).Shapes.AddPicture(Filename, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, left, top, width, height);        }        /// <summary>        /// 插入图表操作        /// </summary>        /// <param name="ChartType"></param>        /// <param name="ws"></param>        /// <param name="DataSourcesX1"></param>        /// <param name="DataSourcesY1"></param>        /// <param name="DataSourcesX2"></param>        /// <param name="DataSourcesY2"></param>        /// <param name="ChartDataType"></param>        public void InsertActiveChart(Microsoft.Office.Interop.Excel.XlChartType ChartType, string ws, int DataSourcesX1, int DataSourcesY1, int DataSourcesX2, int DataSourcesY2, Microsoft.Office.Interop.Excel.XlRowCol ChartDataType)        {            ChartDataType = Microsoft.Office.Interop.Excel.XlRowCol.xlColumns;            m_wb.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);            {                m_wb.ActiveChart.ChartType = ChartType;                m_wb.ActiveChart.SetSourceData(GetSheet(ws).get_Range(GetSheet(ws).Cells[DataSourcesX1, DataSourcesY1], GetSheet(ws).Cells[DataSourcesX2, DataSourcesY2]), ChartDataType);                m_wb.ActiveChart.Location(Microsoft.Office.Interop.Excel.XlChartLocation.xlLocationAsObject, ws);            }        }        #endregion        #region 颜色定义        /// <summary>        /// 常用颜色定义,对就Excel中颜色名,暂保留用来记录,查阅使用        /// </summary>        public enum ColorIndex        {            无色 = -4142, 自动 = -4105, 黑色 = 1, 褐色 = 53, 橄榄 = 52, 深绿 = 51, 深青 = 49,            深蓝 = 11, 靛蓝 = 55, 灰色80 = 56, 深红 = 9, 橙色 = 46, 深黄 = 12, 绿色 = 10,            青色 = 14, 蓝色 = 5, 蓝灰 = 47, 灰色50 = 16, 红色 = 3, 浅橙色 = 45, 酸橙色 = 43,            海绿 = 50, 水绿色 = 42, 浅蓝 = 41, 紫罗兰 = 13, 灰色40 = 48, 粉红 = 7,            金色 = 44, 黄色 = 6, 鲜绿 = 4, 青绿 = 8, 天蓝 = 33, 梅红 = 54, 灰色25 = 15,            玫瑰红 = 38, 茶色 = 40, 浅黄 = 36, 浅绿 = 35, 浅青绿 = 34, 淡蓝 = 37, 淡紫 = 39,            白色 = 2        }        #endregion    }}
 |