Excel操作类

20 篇文章 0 订阅

 

public class Excel
    {
        private ExcelNS.Application _excelApp = new ExcelNS.Application();
        private ExcelNS.Range _range;

        /// <summary>
        /// 工作簿
        /// </summary>
        private ExcelNS.Workbook _workBook;
        public ExcelNS.Workbook WorkBook
        {
            get { return _workBook; }
        }

        /// <summary>
        /// 工作表集合
        /// </summary>
        public ExcelNS.Worksheets WorkSheets
        {
            get { return (ExcelNS.Worksheets)_workBook.Worksheets; }
        }

        /// <summary>
        /// 工作表数量
        /// </summary>
        /// <returns></returns>
        public int SheetCount
        {
            get { return _workBook.Sheets.Count; }
        }

        /// <summary>
        /// 活动工作表
        /// </summary>
        public ExcelNS.Worksheet ActiveSheet
        {
            get { return (ExcelNS.Worksheet)_workBook.ActiveSheet; }
        }

        /// <summary>
        /// 构造函数,添加一个工作簿
        /// </summary>
        public Excel()
        {
            _excelApp.Visible = false;
            _workBook = _excelApp.Workbooks.Add(Missing.Value);
            ((ExcelNS.Worksheet)_workBook.Sheets[1]).Select(Missing.Value);
        }

        /// <summary>
        /// 保存工作簿
        /// </summary>
        /// <param name="fileName">工作簿名称(文件名 *.xls)</param>
        public void SaveAs(string fileName)
        {
            _workBook.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
                Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, 
                Missing.Value, Missing.Value);

            _range = null;
            _workBook = null;
            _excelApp.Quit();
            _excelApp = null;
        }

        /// <summary>
        /// 获取工作表
        /// </summary>
        /// <param name="index">工作表序号</param>
        public ExcelNS.Worksheet GetWorkSheet(int index)
        {
            if (index < 1 || index > this.SheetCount)
            {
                throw new Exception("下标超出范围!");
            }

            return (ExcelNS.Worksheet)this._workBook.Sheets[index];
        }

        /// <summary>
        /// 选中并激活工作表
        /// </summary>
        /// <param name="index">工作表序号</param>
        public void SelectSheet(int index)
        {
            if (index < 1 || index > this.SheetCount)
            {
                throw new Exception("下标超出范围!");
            }

            ((ExcelNS.Worksheet)_workBook.Sheets[index]).Select(Missing.Value);
        }

        /// <summary>
        /// 重命名工作表
        /// </summary>
        /// <param name="index">工作表序号</param>
        /// <param name="sheetName">工作表名</param>
        public void RenameSheetName(int index, string sheetName)
        {
            if (index < 1 || index > this.SheetCount)
            {
                throw new Exception("下标超出范围!");
            }
            if (string.IsNullOrEmpty(sheetName))
            {
                throw new Exception("工作表名不能为空!");
            }

            foreach (ExcelNS.Worksheet sht in _workBook.Sheets)
            {
                if (sht.Name == sheetName && sht.Index != index)
                {
                    throw new Exception("工作表名不能重复!");
                }
            }

            ((ExcelNS.Worksheet)_workBook.Sheets[index]).Name = sheetName;
        }

        /// <summary>
        /// 添加工作表
        /// </summary>
        /// <param name="sheetName">工作表名</param>
        public void AddSheet(string sheetName)
        {
            if (string.IsNullOrEmpty(sheetName))
            {
                throw new Exception("工作表名不能为空!");
            }

            foreach (ExcelNS.Worksheet sht in _workBook.Sheets)
            {
                if (sht.Name == sheetName)
                {
                    throw new Exception("工作表名不能重复!");
                }
            }

            ExcelNS.Worksheet sheet = (ExcelNS.Worksheet)_workBook.Sheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            sheet.Name = sheetName;
        }

        /// <summary>
        /// 删除工作表
        /// </summary>
        /// <param name="index">工作表序号</param>
        public void DeleteSheet(int index)
        {
            if (index < 1 || index > this.SheetCount)
            {
                throw new Exception("下标超出范围!");
            }

            ((ExcelNS.Worksheet)_workBook.Sheets[index]).Delete();
        }

        /// <summary>
        /// 为单元格写入值
        /// </summary>
        /// <param name="row"></param>
        /// <param name="col"></param>
        /// <param name="value"></param>
        public void SetCellValue(int row, int col, object value)
        {
            if (row < 1 || row>65536 || col<1 || col>256)
            {
                throw new Exception("下标超出范围!");
            }

            ActiveSheet.Cells[row, col] = value;
        }

        /// <summary>
        /// 写入行
        /// </summary>
        /// <param name="row">行号</param>
        /// <param name="values">行值</param>
        public void SetRowValues(int row, object[] values)
        {
            if (values.Length > 256)
            {
                throw new Exception("不能超过256列!");
            }

            int col = 1;
            foreach (object value in values)
            {
                ActiveSheet.Cells[row, col] = value;
                col++;
            }
        }

        /// <summary>
        /// 写入列
        /// </summary>
        /// <param name="col">列号</param>
        /// <param name="values">列值</param>
        public void SetColValues(int col, object[] values)
        {
            if (values.Length > 65536)
            {
                throw new Exception("不能超过65536行!");
            }

            int row = 1;
            foreach (object value in values)
            {
                ActiveSheet.Cells[row, col] = value;
                row++;
            }
        }

        /// <summary>
        /// 向单元格插入图片
        /// </summary>
        /// <param name="row">单元格所在行</param>
        /// <param name="col">单元格所在列</param>
        /// <param name="fileName">图片路径</param>
        public void AddPicture(int row, int col, string fileName)
        {
            if (row < 1 || row > 65536 || col < 1 || col > 256)
            {
                throw new Exception("下标超出范围!");
            }

            _range = (ExcelNS.Range)ActiveSheet.Cells[row, col];
            ExcelNS.Pictures pictures = (ExcelNS.Pictures)ActiveSheet.Pictures(Missing.Value);
            ExcelNS.Picture picture = (ExcelNS.Picture)pictures.Insert(fileName, Missing.Value);

            picture.Top = (double)_range.Top;
            picture.Left = (double)_range.Left;
            picture.Width = (double)_range.Width;
            picture.Height = (double)_range.Height;
        }

        /// <summary>
        /// 向单元格插入图片
        /// </summary>
        /// <param name="row">单元格所在行</param>
        /// <param name="col">单元格所在列</param>
        /// <param name="fileName">图片路径</param>
        /// <param name="width">图片宽(大于0)</param>
        /// <param name="height">图片高(大于0)</param>
        public void AddPicture(int row, int col, string fileName, Single width, Single height)
        {
            if (row < 1 || row > 65536 || col < 1 || col > 256)
            {
                throw new Exception("下标超出范围!");
            }

            if (width <= 0)
            {
                throw new Exception("图片宽度必须大于0!");
            }
            if (height <= 0)
            {
                throw new Exception("图片高度必须大于0!");
            }

            _range = (ExcelNS.Range)ActiveSheet.Cells[row, col];
            ExcelNS.Pictures pictures = (ExcelNS.Pictures)ActiveSheet.Pictures(Missing.Value);
            ExcelNS.Picture picture = (ExcelNS.Picture)pictures.Insert(fileName, Missing.Value);

            picture.Top = (double)_range.Top;
            picture.Left = (double)_range.Left;
            picture.Width = width / 5.8;
            picture.Height = height;
        }

        /// <summary>
        /// 设置行高
        /// </summary>
        /// <param name="row">行号(1-65536)</param>
        /// <param name="height">行高(大于0)</param>
        public void SetRowHeight(Single row, Single height)
        {
            if (row < 1 || row > 65536)
            {
                throw new Exception("下标超出范围!");
            }

            if (height <= 0)
            {
                throw new Exception("行高度必须大于0!");
            }

            _range = (ExcelNS.Range)ActiveSheet.Cells[row, 1];
            _range.RowHeight = height;
        }

        /// <summary>
        /// 设置列宽
        /// </summary>
        /// <param name="col">列号(1-256)</param>
        /// <param name="width">列宽(大于0)</param>
        public void SetColWidth(int col, Single width)
        {
            if (col < 1 || col > 256)
            {
                throw new Exception("下标超出范围!");
            }

            if (width <= 0)
            {
                throw new Exception("列宽度必须大于0!");
            }

            _range = (ExcelNS.Range)ActiveSheet.Cells[1, col];
            _range.ColumnWidth = width / 5.8;
        }

        /// <summary>
        /// 设置行高
        /// </summary>
        /// <param name="rows">行集合(起始行号:结束行号,如3:5)</param>
        /// <param name="height">行高</param>
        public void SetRowHeight(object rows, Single height)
        {
            if (height <= 0)
            {
                throw new Exception("行高度必须大于0!");
            }

            try
            {
                ((ExcelNS.Range)ActiveSheet.Rows[rows, System.Type.Missing]).RowHeight = height;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 设置列宽
        /// </summary>
        /// <param name="cols">列集合(起始列标签:结束列标签,如B:F)</param>
        /// <param name="width">列宽(大于0)</param>
        public void SetColWidth(object cols, Single width)
        {
            if (width <= 0)
            {
                throw new Exception("列宽度必须大于0!");
            }

            try
            {
                ((ExcelNS.Range)ActiveSheet.Columns[cols, System.Type.Missing]).ColumnWidth = width / 5.8;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

 操作测试Demo

 /// <summary>
        /// 生成文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnTest_Click(object sender, EventArgs e)
        {
            string fileName = @"D:\" + DateTime.Now.ToString("yyyyMMdd-HHmmss_") + ".xls";
            Excel excel = new Excel();
            //添加工作表
            excel.AddSheet("添加的工作表");

            //选中第二个工作表
            excel.SelectSheet(2);
            excel.SetCellValue(1, 2, "abc");
            excel.AddPicture(1, 5, @"D:\a.jpg");

            //选中第三个工作表
            excel.SelectSheet(3);
            excel.SetCellValue(1, 3, "abc");
            excel.AddPicture(2, 5, @"D:\a.jpg", 100, 80);
            excel.AddPicture(3, 5, @"D:\b.jpg", 100, 80);
            //设置行高、列宽
            excel.SetRowHeight(2, 80);
            excel.SetRowHeight(3, 80);
            excel.SetColWidth(5, 100);

            //选中第一个工作表
            excel.SelectSheet(1);
            //添加行
            excel.SetRowValues(1, new string[] {"序号", "类型A", "类型B", "类型C", "图片" });
            //设置图片列宽
 
            string picName =   @"D:\b.jpg";
            excel.AddPicture(2, 5, picName, 80, 80);
            excel.SetRowHeight(2, 80);
            excel.SetColWidth(5, 100);

            excel.SaveAs(fileName);
        }

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值