• ExcelHelper


    using Microsoft.Office.Interop.Excel;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    
    namespace EXCEL
    {
        /// <summary>
        /// 最后一定要记得close
        /// </summary>
        public class ExcelEditHelper
        {
            public string mFilename;
            public Application app;
            public Workbooks wbs;
            public Workbook wb;
            public Worksheets wss;
            public Worksheet ws;
    
            /// <summary>
            /// 创建一个Excel对象
            /// </summary>
            public void Create()
            {
                app = new Application();
                wbs = app.Workbooks;
                wb = wbs.Add(true);
            }
    
            /// <summary>
            /// 打开一个Excel文件
            /// </summary>
            /// <param name="FileName">excel文件名,包括文件路径</param>
            public void Open(string FileName)
            {
                object missing = System.Reflection.Missing.Value;
                app = new Application();
                wbs = app.Workbooks;
                wb = wbs.Add(FileName);
                wb = wbs.Open(FileName, missing, true, missing, missing, missing, missing, missing, missing, true, missing, missing, missing, missing, missing);
                mFilename = FileName;
                //取得第一个工作薄
                ws = (Worksheet)wb.Worksheets.get_Item(1);
                //取得总记录行数   (包括标题列)
                int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数
                int columnsint = ws.UsedRange.Cells.Columns.Count;//得到列数
                
                //第一行第二列
                string ss = ws.Cells[1, 2].Value2.ToString();
                //取得数据范围区域 (不包括标题列 B2到Bn) 
                Range rng1 = ws.Cells.get_Range("B2", "B" + rowsint);   
                object[,] arryItem = (object[,])rng1.Value2;   //get range's value
                
                for (int i = 1; i <= rowsint - 1; i++)
                {
                    string str = arryItem[i, 1].ToString();
                }
            }
    
            /// <summary>
            /// 获取一个工作表
            /// </summary>
            /// <param name="SheetName">工作表名称</param>
            /// <returns></returns>
            public Worksheet GetSheet(string SheetName)
            {
                Worksheet s = (Worksheet)wb.Worksheets[SheetName];
                return s;
            }
    
            /// <summary>
            /// 添加一个工作表
            /// </summary>
            /// <param name="SheetName">工作表名称</param>
            /// <returns></returns>
            public Worksheet AddSheet(string SheetName)
            {
                Worksheet s = (Worksheet)wb.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                s.Name = SheetName;
                return s;
            }
    
            /// <summary>
            /// 复制并添加一个工作表
            /// </summary>
            /// <param name="OldSheetName"> 被复制工作表</param>
            /// <param name="NewSheetName">新表</param>
            public void CloneSheet(string OldSheetName, string NewSheetName)
            {
                Microsoft.Office.Interop.Excel.Worksheet oldSheet = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[OldSheetName];
                oldSheet.Copy(oldSheet, Type.Missing);
                Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[OldSheetName + " (2)"];
                s.Name = NewSheetName;
            }
    
            /// <summary>
            /// 删除一个工作表
            /// </summary>
            /// <param name="SheetName">工作表名称</param>
            public void DelSheet(string SheetName)
            {
                ((Worksheet)wb.Worksheets[SheetName]).Delete();
            }
    
            /// <summary>
            /// 重命名一个工作表
            /// </summary>
            /// <param name="OldSheetName">被替换名称</param>
            /// <param name="NewSheetName">替换名称</param>
            /// <returns></returns>
            public Worksheet ReNameSheet(string OldSheetName, string NewSheetName)
            {
                Worksheet s = (Worksheet)wb.Worksheets[OldSheetName];
                s.Name = NewSheetName;
                return s;
            }
    
            /// <summary>
            /// 重命名一个工作表
            /// </summary>
            /// <param name="Sheet">被替换工作表</param>
            /// <param name="NewSheetName">替换名称</param>
            /// <returns></returns>
            public Worksheet ReNameSheet(Worksheet Sheet, string NewSheetName)
            {
                Sheet.Name = NewSheetName;
                return Sheet;
            }
    
            /// <summary>
            /// 设置单元格的值
            /// </summary>
            /// <param name="ws">工作表</param>
            /// <param name="x">行标</param>
            /// <param name="y">列标</param>
            /// <param name="value">数据</param>
            public void SetCellValue(Worksheet ws, int x, int y, object value)
            {
                ws.Cells[x, y] = value;
            }
    
            /// <summary>
            /// 设置单元格的值
            /// </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(Worksheet ws, int Startx, int Starty, int Endx, int Endy, int size, string name, Constants color, Constants HorizontalAlignment)
            {
                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="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, Constants color, Constants HorizontalAlignment)
            {
                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(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);
            }
    
            /// <summary>
            /// 将内存中数据表格插入到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)
            {
                int itm = 0;
                foreach (var item in dt.Columns)
                {
                    GetSheet(ws).Cells[startX, startY + itm] = item.ToString();
                    itm++;
                }
                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+1, j + startY] = dt.Rows[i][j];
                    }
                }
            }
            
            /// <summary>
            /// 将内存中数据表格插入到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, Worksheet ws, int startX, int startY)
            {
                int itm = 0;
                foreach (var item in dt.Columns)
                {
                    ws.Cells[startX, startY + itm] = item.ToString();
                    itm++;
                }
                for (int i = 0; i <= dt.Rows.Count - 1; i++)
                {
                    for (int j = 0; j <= dt.Columns.Count - 1; j++)
                    {
                        ws.Cells[startX + i+1, j + startY] = dt.Rows[i][j];
                    }
                }
            }
    
            /// <summary>
            /// 插入表头
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="ws">工作表名称</param>
            public void InsertRowName<T>(string ws) where T : class
            {
                Dictionary<string, string> dic = Resolve<T>();
                int itm = 0;
                foreach (var item in dic)
                {
                    GetSheet(ws).Cells[1, 1 + itm] = item.Value;
                    itm++;
                }
            }
            //获取属性名称及显示名称
            private static Dictionary<string, string> Resolve<T>()
            {
                Dictionary<string, string> dic = new Dictionary<string, string>();
                var t = typeof(T);
                foreach (var property in t.GetProperties())
                {
                    //获取displayname(需在类属性上添加 [DisplayName("**")]特性)
                    DisplayNameAttribute[] x = property.GetCustomAttributes(typeof(DisplayNameAttribute), true) as DisplayNameAttribute[];
                    if (x != null && x.Length > 0)
                    {
                        if (!dic.ContainsKey(property.Name))
                        {
                            dic.Add(property.Name, x[0].DisplayName);
                        }
                    }
                }
                return dic;
            }
    
            /// <summary>
            /// 保存文档
            /// </summary>
            /// <returns></returns>
            public bool Save()
            {
                if (mFilename == "")
                {
                    return false;
                }
                else
                {
                    try
                    {
                        wb.Save();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        return false;
                    }
                }
            }
    
            /// <summary>
            /// 文档另存为
            /// </summary>
            /// <param name="FileName">文件名(包含路径)</param>
            /// <returns></returns>
            public bool SaveAs(object FileName)
            {
                try
                {
                    wb.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
    
            /// <summary>
            /// 关闭一个Excel对象,销毁对象
            /// </summary>
            public void Close()
            {
                wb.Close(Type.Missing, Type.Missing, Type.Missing);
                wbs.Close();
                app.Quit();
                wb = null;
                wbs = null;
                app = null;
                GC.Collect();
            }
        }
    }
  • 相关阅读:
    学习 Message(18): WM_SYSCOMMAND 消息[二] : LParam 参数
    学习 Message(20): WM_SYSCOMMAND 消息[四] : 使最大最小化按钮失效
    学习 Message(16): 测试 $0118 号消息
    学习 Message(15): 让窗体同时响应键盘事件的方法
    学习 Message(17): WM_SYSCOMMAND 消息[一]
    请教大家, 关于 $0118 号消息
    学习 Message(21): WM_SYSCOMMAND 消息[五] : 点击关闭按钮让窗体最小化
    学习 Message(22): WM_SYSCOMMAND 消息[六] : 系统菜单综合操作示例
    根据颜色值获取颜色常量名: ColorToIdent
    “博客无双”第二期拍卖活动将于2011年1月26日14:00开始
  • 原文地址:https://www.cnblogs.com/MrZheng/p/8962055.html
Copyright © 2020-2023  润新知