现在的位置: 首页 > 综合 > 正文

[原创]C# 操作Excel的类

2012年08月20日 ⁄ 综合 ⁄ 共 14279字 ⁄ 字号 评论关闭

最近领导要求把一些数导入Excel生成报表, 工作本来是要手动完成的,但咱是做程序的, 应该想一切办法让程序来代替我们完成任务, 于是写了一个操作Excel的程序, 现将代码公布, 希望对读本文的朋友有所帮助

http://xingfustar.cnblogs.com

代码写的不好,请多原谅, 目的与大家多交流学习,有什么问题,欢迎指出.

http://xingfustar.cnblogs.com

使用该代码要先引用Excel

/*----------------------------------------------------------------
// 版权:
http://XingFuStar.cnblogs.com
//
// 文件名: OpeareExcel
// 文件功能描述: 用C#来操作Excel,
//
// 作者:XingFuStar
// 日期:2007年8月10日
//
// 当前版本:V1.0.2
//
// 修改日期:2007年8月13日
// 修改内容:增加打开保存等功能
// 修改日期:2007年9月12日
// 修改内容:修改关闭Excel时提供保存选择
//----------------------------------------------------------------
*/

using System;

using Microsoft.Office.Core;
using Excel;

namespace XingFuStudio.ExcelEdit
{
    
class ExcelEdit
    {
        
string myFileName;
        Excel.Application myExcel;
        Excel.Workbook myWorkBook;

        /// <summary>
        
/// 构造函数,不创建Excel工作薄
        
/// </summary>
        public ExcelEdit()
        {
            
//请不要删除以下信息
            
//版权:http://XingFuStar.cnblogs.com
        }

        /// <summary>
        
/// 创建Excel工作薄
        
/// </summary>
        public void CreateExcel()
        {
            myExcel 
= new Excel.Application();
            myWorkBook 
= myExcel.Application.Workbooks.Add(true);
        }

        /// <summary>
        
/// 显示Excel
        
/// </summary>
        public void ShowExcel()
        {
            myExcel.Visible 
= true;
        }

        /// <summary>
        
/// 将数据写入Excel
        
/// </summary>
        
/// <param name="data">要写入的二维数组数据</param>
        
/// <param name="startRow">Excel中的起始行</param>
        
/// <param name="startColumn">Excel中的起始列</param>
        public void WriteData(string[,] data, int startRow, int startColumn)
        {
            
int rowNumber = data.GetLength(0);
            
int columnNumber = data.GetLength(1);

            for (int i = 0; i < rowNumber; i++)
            {
                
for (int j = 0; j < columnNumber; j++)
                {
                    
//在Excel中,如果某单元格以单引号“'”开头,表示该单元格为纯文本,因此,我们在每个单元格前面加单引号。 
                    myExcel.Cells[startRow + i, startColumn + j] = "'" + data[i, j];
                }
            }
        }

        /// <summary>
        
/// 将数据写入Excel
        
/// </summary>
        
/// <param name="data">要写入的字符串</param>
        
/// <param name="starRow">写入的行</param>
        
/// <param name="startColumn">写入的列</param>
        public void WriteData(string data, int row, int column)
        {
            myExcel.Cells[row, column] 
= data;
        }

        /// <summary>
        
/// 将数据写入Excel
        
/// </summary>
        
/// <param name="data">要写入的数据表</param>
        
/// <param name="startRow">Excel中的起始行</param>
        
/// <param name="startColumn">Excel中的起始列</param>
        public void WriteData(System.Data.DataTable data, int startRow, int startColumn)
        {
            
for (int i = 0; i <= data.Rows.Count - 1; i++)
            {
                
for (int j = 0; j <= data.Columns.Count - 1; j++)
                {
                    
//在Excel中,如果某单元格以单引号“'”开头,表示该单元格为纯文本,因此,我们在每个单元格前面加单引号。 
                    myExcel.Cells[startRow + i, startColumn + j] = "'" + data.Rows[i][j].ToString();
                }
            }
        }

        /// <summary>
        
/// 读取指定单元格数据
        
/// </summary>
        
/// <param name="row">行序号</param>
        
/// <param name="column">列序号</param>
        
/// <returns>该格的数据</returns>
        public string  ReadData(int row, int column)
        {
            Excel.Range range 
= myExcel.get_Range(myExcel.Cells[row, column], myExcel.Cells[row, column]);
            
return range.Text.ToString();
        }

        /// <summary>
        
/// 向Excel中插入图片
        
/// </summary>
        
/// <param name="pictureName">图片的绝对路径加文件名</param>
        public void InsertPictures(string pictureName)
        {
            Excel.Worksheet worksheet 
= (Excel.Worksheet)myExcel.ActiveSheet;
            
//后面的数字表示位置,位置默认
            worksheet.Shapes.AddPicture(pictureName, MsoTriState.msoFalse, MsoTriState.msoTrue, 1010150150);
        }

        /// <summary>
        
/// 向Excel中插入图片
        
/// </summary>
        
/// <param name="pictureName">图片的绝对路径加文件名</param>
        
/// <param name="left">左边距</param>
        
/// <param name="top">右边距</param>
        
/// <param name="width"></param>
        
/// <param name="heigth"></param>
        public void InsertPictures(string pictureName, int left, int top, int width, int heigth)
        {
            Excel.Worksheet worksheet 
= (Excel.Worksheet)myExcel.ActiveSheet;
            worksheet.Shapes.AddPicture(pictureName, MsoTriState.msoFalse, MsoTriState.msoTrue, top, left, heigth, width);
        }

        /// <summary>
        
/// 重命名工作表
        
/// </summary>
        
/// <param name="sheetNum">工作表序号,从左到右,从1开始</param>
        
/// <param name="newSheetName">新的工作表名</param>
        public void ReNameSheet(int sheetNum, string newSheetName)
        {
            Excel.Worksheet worksheet 
= (Excel.Worksheet)myExcel.Worksheets[sheetNum];
            worksheet.Name 
= newSheetName;
        }

        /// <summary>
        
/// 重命名工作表
        
/// </summary>
        
/// <param name="oldSheetName">原有工作表名</param>
        
/// <param name="newSheetName">新的工作表名</param>
        public void ReNameSheet(string oldSheetName, string newSheetName)
        {
            Excel.Worksheet worksheet 
= (Excel.Worksheet)myExcel.Worksheets[oldSheetName];
            worksheet.Name 
= newSheetName;
        }

        /// <summary>
        
/// 新建工作表
        
/// </summary>
        
/// <param name="sheetName">工作表名</param>
        public void CreateWorkSheet(string sheetName)
        {
            Excel.Worksheet newWorksheet 
= (Excel.Worksheet)myWorkBook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            newWorksheet.Name 
= sheetName;
        }

        /// <summary>
        
/// 激活工作表
        
/// </summary>
        
/// <param name="sheetName">工作表名</param>
        public void ActivateSheet(string sheetName)
        {
            Excel.Worksheet worksheet 
= (Excel.Worksheet)myExcel.Worksheets[sheetName];
            worksheet.Activate();
        }

        /// <summary>
        
/// 激活工作表
        
/// </summary>
        
/// <param name="sheetNum">工作表序号</param>
        public void ActivateSheet(int sheetNum)
        {
            Excel.Worksheet worksheet 
= (Excel.Worksheet)myExcel.Worksheets[sheetNum];
            worksheet.Activate();
        }

        /// <summary>
        
/// 删除一个工作表
        
/// </summary>
        
/// <param name="SheetName">删除的工作表名</param>
        public void DeleteSheet(int sheetNum)
        {
            ((Excel.Worksheet)myWorkBook.Worksheets[sheetNum]).Delete();
        }

        /// <summary>
        
/// 删除一个工作表
        
/// </summary>
        
/// <param name="SheetName">删除的工作表序号</param>
        public void DeleteSheet(string sheetName)
        {
            ((Excel.Worksheet)myWorkBook.Worksheets[sheetName]).Delete();
        }

        /// <summary>
        
/// 合并单元格
        
/// </summary>
        
/// <param name="startRow">起始行</param>
        
/// <param name="startColumn">起始列</param>
        
/// <param name="endRow">结束行</param>
        
/// <param name="endColumn">结束列</param>
        public void CellsUnite(int startRow, int startColumn, int endRow, int endColumn)
        {
            Excel.Range range 
= myExcel.get_Range(myExcel.Cells[startRow, startColumn], myExcel.Cells[endRow, endColumn]);
            range.MergeCells 
= true;
        }

        /// <summary>
        
/// 单元格文字对齐方式
        
/// </summary>
        
/// <param name="startRow">起始行</param>
        
/// <param name="startColumn">起始列</param>
        
/// <param name="endRow">结束行</param>
        
/// <param name="endColumn">结束列</param>
        
/// <param name="hAlign">水平对齐</param>
        
/// <param name="vAlign">垂直对齐</param>
        public void CellsAlignment(int startRow, int startColumn, int endRow, int endColumn, ExcelHAlign hAlign, ExcelVAlign vAlign)
        {
            Excel.Range range 
= myExcel.get_Range(myExcel.Cells[startRow, startColumn], myExcel.Cells[endRow, endColumn]);
            range.HorizontalAlignment 
= hAlign;
            range.VerticalAlignment 
= vAlign;
        }

        /// <summary>
        
/// 绘制指定单元格的边框
        
/// </summary>
        
/// <param name="startRow">起始行</param>
        
/// <param name="startColumn">起始列</param>
        
/// <param name="endRow">结束行</param>
        
/// <param name="endColumn">结束列</param>
        public void CellsDrawFrame(int startRow, int startColumn, int endRow, int endColumn)
        {
            CellsDrawFrame(startRow, startColumn, endRow, endColumn,
                
truetruetruetruetruetruefalsefalse,
                LineStyle.连续直线, BorderWeight.细, ColorIndex.自动);
        }

        /// <summary>
        
/// 绘制指定单元格的边框
        
/// </summary>
        
/// <param name="startRow">起始行</param>
        
/// <param name="startColumn">起始列</param>
        
/// <param name="endRow">结束行</param>
        
/// <param name="endColumn">结束列</param>
        
/// <param name="isDrawTop">是否画上外框</param>
        
/// <param name="isDrawBottom">是否画下外框</param>
        
/// <param name="isDrawLeft">是否画左外框</param>
        
/// <param name="isDrawRight">是否画右外框</param>
        
/// <param name="isDrawHInside">是否画水平内框</param>
        
/// <param name="isDrawVInside">是否画垂直内框</param>
        
/// <param name="isDrawDown">是否画斜向下线</param>
        
/// <param name="isDrawUp">是否画斜向上线</param>
        
/// <param name="lineStyle">线类型</param>
        
/// <param name="borderWeight">线粗细</param>
        
/// <param name="color">线颜色</param>
        public void CellsDrawFrame(int startRow, int startColumn, int endRow, int endColumn, 
            
bool isDrawTop, bool isDrawBottom, bool isDrawLeft, bool isDrawRight,
            
bool isDrawHInside, bool isDrawVInside, bool isDrawDiagonalDown, bool isDrawDiagonalUp,
            LineStyle lineStyle, BorderWeight borderWeight, ColorIndex color)
        {
            
//获取画边框的单元格
            Excel.Range range = myExcel.get_Range(myExcel.Cells[startRow, startColumn], myExcel.Cells[endRow, endColumn]);

            //清除所有边框
            range.Borders[XlBordersIndex.xlEdgeTop].LineStyle = LineStyle.无;
            range.Borders[XlBordersIndex.xlEdgeBottom].LineStyle 
= LineStyle.无;
            range.Borders[XlBordersIndex.xlEdgeLeft].LineStyle 
= LineStyle.无;
            range.Borders[XlBordersIndex.xlEdgeRight].LineStyle 
= LineStyle.无;
            range.Borders[XlBordersIndex.xlInsideHorizontal].LineStyle 
= LineStyle.无;
            range.Borders[XlBordersIndex.xlInsideVertical].LineStyle 
= LineStyle.无;
            range.Borders[XlBordersIndex.xlDiagonalDown].LineStyle 
= LineStyle.无;
            range.Borders[XlBordersIndex.xlDiagonalUp].LineStyle 
= LineStyle.无;

            //以下是按参数画边框 
            if (isDrawTop)
            {
                range.Borders[XlBordersIndex.xlEdgeTop].LineStyle 
= lineStyle;
                range.Borders[XlBordersIndex.xlEdgeTop].Weight 
= borderWeight;
                range.Borders[XlBordersIndex.xlEdgeTop].ColorIndex 
= color;
            }

            if (isDrawBottom)
            {
                range.Borders[XlBordersIndex.xlEdgeBottom].LineStyle 
= lineStyle;
                range.Borders[XlBordersIndex.xlEdgeBottom].Weight 
= borderWeight;
                range.Borders[XlBordersIndex.xlEdgeBottom].ColorIndex 
= color;
            }

            if (isDrawLeft)
            {
                range.Borders[XlBordersIndex.xlEdgeLeft].LineStyle 
= lineStyle;
                range.Borders[XlBordersIndex.xlEdgeLeft].Weight 
= borderWeight;
                range.Borders[XlBordersIndex.xlEdgeLeft].ColorIndex 
= color;
            }

            if (isDrawRight)
            {
                range.Borders[XlBordersIndex.xlEdgeRight].LineStyle 
= lineStyle;
                range.Borders[XlBordersIndex.xlEdgeRight].Weight 
= borderWeight;
                range.Borders[XlBordersIndex.xlEdgeRight].ColorIndex 
= color;
            }

            if (isDrawVInside)
            {
                range.Borders[XlBordersIndex.xlInsideVertical].LineStyle 
= lineStyle;
                range.Borders[XlBordersIndex.xlInsideVertical].Weight 
= borderWeight;
                range.Borders[XlBordersIndex.xlInsideVertical].ColorIndex 
= color;
            }

            if (isDrawHInside)
            {
                range.Borders[XlBordersIndex.xlInsideHorizontal].LineStyle 
= lineStyle;
                range.Borders[XlBordersIndex.xlInsideHorizontal].Weight 
= borderWeight;
                range.Borders[XlBordersIndex.xlInsideHorizontal].ColorIndex 
= color;
            }

            if (isDrawDiagonalDown)
            {
                range.Borders[XlBordersIndex.xlDiagonalDown].LineStyle 
= lineStyle;
                range.Borders[XlBordersIndex.xlDiagonalDown].Weight 
= borderWeight;
                range.Borders[XlBordersIndex.xlDiagonalDown].ColorIndex 
= color;
            }

            if (isDrawDiagonalUp)
            {
                range.Borders[XlBordersIndex.xlDiagonalUp].LineStyle 
= lineStyle;
                range.Borders[XlBordersIndex.xlDiagonalUp].Weight 
= borderWeight;
                range.Borders[XlBordersIndex.xlDiagonalUp].ColorIndex 
= color;
            }
        }

        /// <summary>
        
/// 单元格背景色及填充方式
        
/// </summary>
        
/// <param name="startRow">起始行</param>
        
/// <param name="startColumn">起始列</param>
        
/// <param name="endRow">结束行</param>
        
/// <param name="endColumn">结束列</param>
        
/// <param name="color">颜色索引</param>
        public void CellsBackColor(int startRow, int startColumn, int endRow, int endColumn, ColorIndex color)
        {
            Excel.Range range 
= myExcel.get_Range(myExcel.Cells[startRow, startColumn], myExcel.Cells[endRow, endColumn]);
            range.Interior.ColorIndex 
= color;
            range.Interior.Pattern 
= Pattern.Solid;
        }

        /// <summary>
        
/// 单元格背景色及填充方式
        
/// </summary>
        
/// <param name="startRow">起始行</param>
        
/// <param name="startColumn">起始列</param>
        
/// <param name="endRow">结束行</param>
        
/// <param name="endColumn">结束列</param>
        
/// <param name="color">颜色索引</param>
        
/// <param name="pattern">填充方式</param>
        public void CellsBackColor(int startRow, int startColumn, int endRow, int endColumn, ColorIndex color, Pattern pattern)
        {
            Excel.Range range 
= myExcel.get_Range(myExcel.Cells[startRow, startColumn], myExcel.Cells[endRow, endColumn]);
            range.Interior.ColorIndex 
= color;
            range.Interior.Pattern 
= pattern;
        }

        /// <summary>
        
/// 设置行高
        
/// </summary>
        
/// 

抱歉!评论已关闭.