zoukankan      html  css  js  c++  java
  • Excel操作类(转载)


    /// <summary>
        /// Excel操作类
        /// </summary>
        public class Excel
        {
            #region 私有属性
            private _Application _oExcel = null; //Excel应用程序
            private _Workbook _oBook = null;     //Excel工作薄
            private _Worksheet _oSheet = null;   //Excel工作表

            private bool _visible=false; //是否显示Excel程序
            #endregion


            #region 公共属性
            public bool Visible
            {
                set { _oExcel.Visible = value; }
            }

            public object CurrentSheet
            {
                set
                {
                    _oSheet = (_Worksheet)_oBook.Sheets[value];
                    _oSheet.Activate();
                }
            }
            #endregion


            #region Excel对象初始化
            /// <summary>
            /// 初始化
            /// </summary>
            private void Init()
            {
                GC.Collect();

                _oExcel = new ApplicationClass();
            }
            #endregion


            #region 构造函数
            /// <summary>
            /// 实例一个Excel对象
            /// </summary>
            public Excel()
            {
                Init();
            }

            /// <summary>
            /// 实例一个Excel对象
            /// </summary>
            /// <param name="fileName">文件名称(物理路径)</param>
            public Excel(string fileName)
            {
                Init();

                _oBook = _oExcel.Workbooks.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);

                _oSheet = (_Worksheet)_oBook.ActiveSheet;
            }
            #endregion


            #region 打开Excel文件
            /// <summary>
            /// 打开一个指定的Excel文件
            /// </summary>
            /// <param name="fileName">文件名称(物理路径)</param>
            public void Open(string fileName)
            {
                _oBook = _oExcel.Workbooks.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);

                _oSheet = (_Worksheet)_oBook.ActiveSheet;
            }
            #endregion


            #region 设置Excel值
            /// <summary>
            /// 设置Excel的单元格值
            /// </summary>
            /// <param name="x">行开始</param>
            /// <param name="y">列开始</param>
            /// <param name="value">值</param>
            public void SetCellValue(int x, int y, object value)
            {
                _oSheet.Cells[x, y] = value;
            }

            /// <summary>
            /// 设置Excel的行值
            /// </summary>
            /// <param name="startX">行开始</param>
            /// <param name="startY">列开始</param>
            /// <param name="values">值</param>
            public void SetRowValue(int startX, int startY, object[] values)
            {
                for (int i = 0; i < values.Length; i++)
                {
                    _oSheet.Cells[startX, startY + i] = values[i];
                }
            }

            /// <summary>
            /// 设置Excel的列值
            /// </summary>
            /// <param name="startX">行开始</param>
            /// <param name="startY">列开始</param>
            /// <param name="values">值</param>
            public void SetColumnValue(int startX, int startY, object[] values)
            {
                for (int i = 0; i < values.Length; i++)
                {
                    _oSheet.Cells[startX + i, startY] = values[i];
                }
            }

            /// <summary>
            /// 将内存中数据表格插入到Excel指定工作表的指定位置
            /// </summary>
            /// <param name="dt">数据表</param>
            /// <param name="startX">行开始</param>
            /// <param name="startY">列开始</param>
            public void InsertTable(System.Data.DataTable dt, int startX, int startY)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        _oSheet.Cells[startX + i, j + startY] = dt.Rows[i][j];
                    }
                }
            }
            #endregion


            #region 增加数据区模板行
            /// <summary>
            /// 增加数据区模板行
            /// </summary>
            /// <param name="tempRowIndex">行起始位置</param>
            /// <param name="tempRowCount">增加的行数</param>
            /// <returns>增加的行数</returns>
            public int AddRow(int tempRowIndex, int tempRowCount)
            {
                for (int i = 0; i < tempRowCount; i++)
                {
                    Range row = (Range)_oSheet.Rows[tempRowIndex, Type.Missing];
                    row.Select();
                    row.Copy(Type.Missing);

                    row.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown, Type.Missing);
                }

                return tempRowCount;
            }

            /// <summary>
            /// 增加数据区模板行
            /// </summary>
            /// <param name="tempRowIndex">行起始位置</param>
            /// <returns>增加的行数</returns>
            public int AddRow(int tempRowIndex)
            {
                Range row = (Range)_oSheet.Rows[tempRowIndex, Type.Missing];
                row.Select();
                row.Copy(Type.Missing);

                row.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown, Type.Missing);

                return 1;
            }
            #endregion


            #region 设置保护工作表
            /// <summary>
            /// 设置工作表为只读
            /// </summary>
            /// <param name="pwd">密码</param>
            public void Protect(object pwd)
            {
                _oSheet.Protect(pwd, _oSheet.ProtectDrawingObjects,
                        true, _oSheet.ProtectScenarios, _oSheet.ProtectionMode,
                        _oSheet.Protection.AllowFormattingCells,
                        _oSheet.Protection.AllowFormattingColumns,
                        _oSheet.Protection.AllowFormattingRows,
                        _oSheet.Protection.AllowInsertingColumns,
                        _oSheet.Protection.AllowInsertingRows,
                        _oSheet.Protection.AllowInsertingHyperlinks,
                        _oSheet.Protection.AllowDeletingColumns,
                        _oSheet.Protection.AllowDeletingRows,
                        _oSheet.Protection.AllowSorting,
                        _oSheet.Protection.AllowFiltering,
                        _oSheet.Protection.AllowUsingPivotTables);
            }

            /// <summary>
            /// 撤销工作表为只读
            /// </summary>
            /// <param name="pwd">密码</param>
            public void Unprotect(object pwd)
            {
                _oSheet.Unprotect(pwd);
            }
            #endregion


            #region 保存Excel
            /// <summary>
            /// 保存Excel文件到指定的路径(如果文件存在,则覆盖。)
            /// </summary>
            /// <param name="fileName">文件名称(物理路径)</param>
            /// <returns></returns>
            public bool SaveAs(string fileName)
            {
                try
                {
                    //_oBook.SaveCopyAs(fileName);
                    _oExcel.DisplayAlerts = false;
     
                    _oBook.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                    _oExcel.DisplayAlerts = true;

                    return true;

                }
                catch (Exception ex)
                {
                    return false;
                }
            }
            #endregion


            #region 关闭Excel的工作薄
            /// <summary>
            /// 关闭Excel的工作薄
            /// </summary>
            public void Close()
            {
                if (_oBook == null)
                    return;

                _oBook.Close(Type.Missing, Type.Missing, Type.Missing);
                _oBook = null;
            }
            #endregion


            #region 关闭Excel应用程序进程
            /// <summary>
            /// 杀死Excel进程
            /// </summary>
            public void Kill()
            {
                if (_oBook != null)
                    _oBook.Close(Type.Missing, Type.Missing, Type.Missing);

                if (_oExcel != null)
                    _oExcel.Quit();

                _oSheet = null;
                _oBook = null;
                _oExcel = null;

                GC.Collect();
            }
            #endregion
        }
  • 相关阅读:
    angularjs中的jqlite的认识理解及操作使用
    轻谈Normalize.css
    oppo R9 WLAN使用代理图解
    前端小炒的win7使用笔记(收藏篇)
    git操作方便,简单使用的客户端sourcetree 安装配置所遇问题总结
    关于js中对事件绑定与普通事件的理解
    IT最新最火的网络词汇*2*(文章来源电商)
    Git笔记之初识vi编辑器
    番茄钟工作法--我们天生爱分享
    探讨"点"语法的奥秘
  • 原文地址:https://www.cnblogs.com/nianshi/p/1786008.html
Copyright © 2011-2022 走看看