惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
L
LINUX DO - 热门话题
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
Cisco Talos Blog
Cisco Talos Blog
AI
AI
L
LINUX DO - 最新话题
H
Heimdal Security Blog
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The GitHub Blog
The GitHub Blog
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
S
Securelist
博客园_首页
IT之家
IT之家
Schneier on Security
Schneier on Security
博客园 - 叶小钗
罗磊的独立博客
WordPress大学
WordPress大学
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
The Register - Security
The Register - Security
D
DataBreaches.Net
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
Recorded Future
Recorded Future
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tailwind CSS Blog
N
News and Events Feed by Topic
Cyberwarzone
Cyberwarzone
T
Tor Project blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com

博客园 - Seer Lin

自己开发的ERP系统,有需要的联系 MSCRM2016 取消邮箱强制SSL 不听话的下属辞职记 Windows 7下,巧让家用UPS也支持电脑自动关机 海蜘蛛去广告 [转]SQL2008链接服务器数据同步 asp.net 在IE8 导出excel时的问题 [转]mssql链接服务器 win2008 R2 64位系统下配置DCOM权限 在excel中,将 长*宽*高 这样的格式列,拆分成3列 将没有产品图片的产品设置为不在前台显示SQL实现 [转]在Reporting Services报表中引用FTP站点上的图片 mscrm js webservic 常用功能 mscrm4.0 判断当前用户角色_示例 mscrm 4.0 获取当前用户角色 mscrm4.0 获取当前登录的用户名 mscrm4.0 用js调用Webservice vs2010 js 代码折叠插件 MSCRM 删除客户数据 MSCRM offline plugin开发注意事项
[转]excel 操作类
Seer Lin · 2011-05-26 · via 博客园 - Seer Lin

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.Excel;

namespace ASS.Utility
{
    public class ExcelEdit
    {
        private string myFileName;

        public string MyFileName
        {
get { return myFileName; }
set { myFileName = value; }
        }
        Application myExcel;

        public Application MyExcel
        {
            get { return myExcel; }
            set { myExcel = value; }
        }
        Workbook myWorkBook;

        public Workbook MyWorkBook
        {
            get { return myWorkBook; }
            set { myWorkBook = value; }
        }


        /// <summary>
        /// 构造函数,不创建Excel工作薄
        /// </summary>
        public ExcelEdit() {
         
        }


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


        /// <summary>
        /// 显示工作薄
        /// </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 rowCount = data.GetLength(0);
            int columnCount = data.GetLength(1);
            for (int i = 0; i < rowCount;i++ ) {
                for (int j = 0; j < columnCount; j++) {
                    MyExcel.Cells[startRow + i, startColumn + j] = "'" + data[i, j];
                }
            
            }
        }


        /// <summary>
        /// 将数据写入指定的单元格
        /// </summary>
        /// <param name="data">要写入的数据</param>
        /// <param name="row">行号</param>
        /// <param name="column">列号</param>
        public void WriteData(string data, int row, int column) {
            MyExcel.Cells[row, column] = data;
        }

        /// <summary>
        /// 将DataTable对象写入Excel
        /// </summary>
        /// <param name="data">DataTable对象</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; i++) {
                for (int j = 0; j < data.Columns.Count; j++) {
                    MyExcel.Cells[startRow + i, startColumn + j] = "'" + data.Rows[i][j].ToString();
                }
            }
        }


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


        /// <summary>
        /// 向Excel中插入图片
        /// </summary>
        /// <param name="picPath">图片的绝对路径</param>
        public void InsertPicture(string picPath) {
            Worksheet workSheet = MyExcel.ActiveSheet as Worksheet;
            workSheet.Shapes.AddPicture(picPath,MsoTriState.msoFalse,MsoTriState.msoCTrue,10,10,150,150);

        }


        /// <summary>
        /// 向Excel中插入图片
        /// </summary>
        /// <param name="picPath">图片的路径</param>
        /// <param name="top">上边距</param>
        /// <param name="left">左边距</param>
        /// <param name="height">高度</param>
        /// <param name="width">宽度</param>
        public void InsertPicture(string picPath, float top, float left, float height, float width) {

            Worksheet workSheet = MyExcel.ActiveSheet as Worksheet;
            workSheet.Shapes.AddPicture(picPath, MsoTriState.msoFalse, MsoTriState.msoCTrue, left, top, width, height);
        }


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

       /// <summary>
       /// 重名命工作表
       /// </summary>
       /// <param name="oldName">旧的工作表名</param>
       /// <param name="newName">新的工作表名</param>
        public void ReNameWorkSheet(string oldName, string newName)
        {
            Worksheet workSheet = MyExcel.Worksheets[oldName] as Worksheet;
            workSheet.Name = newName;
        }

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

        }

        /// <summary>
        /// 激活工作表
        /// </summary>
        /// <param name="sheetNum">工作表序号</param>
        public void ActiveSheet(int sheetNum) {

            Worksheet workSheet = MyExcel.Worksheets[sheetNum] as Worksheet;
            workSheet.Activate();
        }

        /// <summary>
        /// 激活工作表
        /// </summary>
        /// <param name="sheetName">工作表名</param>
        public void ActiveSheet(string sheetName) {
            Worksheet workSheet = MyExcel.Worksheets[sheetName] as Worksheet;
            workSheet.Activate();
        }

        /// <summary>
        /// 删除工作表
        /// </summary>
        /// <param name="sheetNum">工作表序号</param>
        public void DeleteWorkSheet(int sheetNum) {

            (MyExcel.Worksheets[sheetNum] as Worksheet).Delete();
        }

        /// <summary>
        /// 删除工作表
        /// </summary>
        /// <param name="sheetName"></param>
        public void DeleteWorkSheet(string sheetName) {

            (MyExcel.Worksheets[sheetName] as Worksheet).Delete();
        }

        /// <summary>
        /// 合并单元格
        /// </summary>
        /// <param name="startRow">开始行</param>
        /// <param name="startColumn">开始列</param>
        /// <param name="endRow">结束行</param>
        /// <param name="endColumn">结束列</param>
        public void UnitCells(int startRow, int startColumn, int endRow, int endColumn) {

            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 AlignmentCells(int startRow, int startColumn, int endRow, int endColumn, ExcelStyle.ExcelHAlign hAlign, ExcelStyle.ExcelVAlign vAlign) {
            Range range = MyExcel.get_Range(MyExcel.Cells[startRow, startColumn], MyExcel.Cells[endRow, endColumn]);
            range.VerticalAlignment = vAlign;
            range.HorizontalAlignment = hAlign;
        }

      
        /// <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 DrawCellsFrame(int startRow, int startColumn, int endRow, int endColumn,
            bool isDrawTop, bool isDrawBottom, bool isDrawLeft, bool isDrawRight,
            bool isDrawHInside, bool isDrawVInside, bool isDrawDiagonalDown, bool isDrawDiagonalUp,
            ExcelStyle.LineStyle lineStyle, ExcelStyle.BorderWeight borderWeight, ExcelStyle.ColorIndex color)
        {
            //获取画边框的单元格
            Range range = MyExcel.get_Range(MyExcel.Cells[startRow, startColumn], MyExcel.Cells[endRow, endColumn]);

            //清除所有边框
            range.Borders[XlBordersIndex.xlEdgeTop].LineStyle = ExcelStyle.LineStyle.无;
            range.Borders[XlBordersIndex.xlEdgeBottom].LineStyle = ExcelStyle.LineStyle.无;
            range.Borders[XlBordersIndex.xlEdgeLeft].LineStyle = ExcelStyle.LineStyle.无;
            range.Borders[XlBordersIndex.xlEdgeRight].LineStyle = ExcelStyle.LineStyle.无;
            range.Borders[XlBordersIndex.xlInsideHorizontal].LineStyle = ExcelStyle.LineStyle.无;
            range.Borders[XlBordersIndex.xlInsideVertical].LineStyle = ExcelStyle.LineStyle.无;
            range.Borders[XlBordersIndex.xlDiagonalDown].LineStyle = ExcelStyle.LineStyle.无;
            range.Borders[XlBordersIndex.xlDiagonalUp].LineStyle = ExcelStyle.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, ExcelStyle.ColorIndex color)
        {
            Range range = MyExcel.get_Range(MyExcel.Cells[startRow, startColumn], MyExcel.Cells[endRow, endColumn]);
            range.Interior.ColorIndex = color;
            range.Interior.Pattern = ExcelStyle.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,ExcelStyle.ColorIndex color,ExcelStyle.Pattern pattern){
            Range range = MyExcel.get_Range(MyExcel.Cells[startRow, startColumn], MyExcel.Cells[endRow, endColumn]);
            range.Interior.ColorIndex = color;
            range.Interior.Pattern = pattern;
        }

        /// <summary>
        /// 设置行高
        /// </summary>
        /// <param name="startRow">开始行</param>
        /// <param name="endRow">结束行</param>
        /// <param name="height">行高</param>
        public void SetRowHeight(int startRow, int endRow, float height) {
            Worksheet workSheet = MyExcel.ActiveSheet as Worksheet;
            Range range = workSheet.Rows[startRow.ToString() + ":" + endRow.ToString(), System.Type.Missing] as Range;
            range.RowHeight = height;       
        }

        /// <summary>
        /// 设置列宽
        /// </summary>
        /// <param name="startColumn">开始列</param>
        /// <param name="endColumn">结束列</param>
        /// <param name="width">宽度</param>
        public void SetColumnWidth(string startColumn, string endColumn, float width) {
            Worksheet workSheet = MyExcel.ActiveSheet as Worksheet;
            Range range = workSheet.Columns[startColumn.ToString() + ":" + endColumn.ToString(), System.Type.Missing] as Range;
            range.ColumnWidth = width;
        }

        /// <summary>
        /// 自动调整行高
        /// </summary>
        /// <param name="rowNum">行号</param>
        public void RowAutoFit(int rowNum) {

            Worksheet workSheet = MyExcel.ActiveSheet as Worksheet;
            Range range = workSheet.Rows[rowNum.ToString() + ":" + rowNum.ToString(), System.Type.Missing] as Range ;
            range.EntireColumn.AutoFit();
        }

        /// <summary>
        /// 设置列宽
        /// </summary>
        /// <param name="startColumn">起始列</param>
        /// <param name="endColumn">结束列</param>
        /// <param name="width">宽度</param>
        public void SetColumnWidth(int startColumn, int endColumn, float width) {
          
            string strStartColumn = GetColumnName(startColumn);
            string strEndColumn = GetColumnName(endColumn);

            Worksheet workSheet = MyExcel.ActiveSheet as Worksheet;
            Range range = workSheet.Columns[strStartColumn + ":" + strEndColumn, System.Type.Missing] as Range;
            range.ColumnWidth = width;
          
        }

        /// <summary>
        /// 设置字体颜色
        /// </summary>
        /// <param name="startRow">起始行</param>
        /// <param name="startColumn">起始列</param>
        /// <param name="endRow">结束行</param>
        /// <param name="endColumn">结束列</param>
        /// <param name="color">颜色索引</param>
        public void SetFontColor(int startRow, int startColumn, int endRow, int endColumn, ExcelStyle.ColorIndex color)
        {
            Range range = MyExcel.get_Range(MyExcel.Cells[startRow,startColumn],MyExcel.Cells[endRow,endColumn]);
            range.Font.ColorIndex = color;
        }

        /// <summary>
        /// 设置字体样式
        /// </summary>
        /// <param name="startRow">起始行</param>
        /// <param name="startColumn">起始列</param>
        /// <param name="endRow">结束行</param>
        /// <param name="endColumn">结束列</param>
        /// <param name="isBold">是否加粗</param>
        /// <param name="isItalic">是否斜体</param>
        /// <param name="underline">下划线类型</param>
        public void SetFontStyle(int startRow, int startColumn, int endRow, int endColumn, bool isBold, bool isItalic, ExcelStyle.UnderlineStyle underline)
        {
            Range range = MyExcel.get_Range(MyExcel.Cells[startRow, startColumn], MyExcel.Cells[endRow, endColumn]);
            range.Font.Bold = isBold;
            range.Font.Italic = isItalic;
            range.Font.Underline = underline;
        }

        /// <summary>
        /// 设置字体和大小
        /// </summary>
        /// <param name="startRow">开始行</param>
        /// <param name="startColumn">开始列</param>
        /// <param name="endRow">结束行</param>
        /// <param name="endColumn">结束列</param>
        /// <param name="fontName">字体名称</param>
        /// <param name="fontSize">字体大小</param>
        public void SetFontNameSize(int startRow, int startColumn, int endRow, int endColumn,string fontName,int fontSize)
        {
            Range range = MyExcel.get_Range(MyExcel.Cells[startRow, startColumn], MyExcel.Cells[endRow, endColumn]);
            range.Font.Name = fontName;
            range.Font.Size = fontSize;
           
        }

        /// <summary>
        /// 打开存在的Excel文件
        /// </summary>
        /// <param name="fileName">文件名</param>
        public void Open(string fileName) {
            MyExcel = new Application();
            MyWorkBook = MyExcel.Workbooks.Add(fileName);
            MyFileName = fileName;
        }

        /// <summary>
        /// 保存Excel
        /// </summary>
        /// <returns></returns>
        public bool Save() {

            if (MyFileName == "")
            {
                return false;
            }
            else {

                try
                {
                    MyWorkBook.Save();
                    return true;
                }
                catch (Exception ex) {

                    return false;
                }
            }
        }
        private string GetColumnName(int number)
        {
            int h, l;
            h = number / 26;
            l = number % 26;
            if (l == 0)
            {
                h -= 1;
                l = 26;
            }
            string s = GetLetter(h) + GetLetter(l);
            return s;
        }
        private string GetLetter(int number)
        {
            switch (number)
            {
                case 1:
                    return "A";
                case 2:
                    return "B";
                case 3:
                    return "C";
                case 4:
                    return "D";
                case 5:
                    return "E";
                case 6:
                    return "F";
                case 7:
                    return "G";
                case 8:
                    return "H";
                case 9:
                    return "I";
                case 10:
                    return "J";
                case 11:
                    return "K";
                case 12:
                    return "L";
                case 13:
                    return "M";
                case 14:
                    return "N";
                case 15:
                    return "O";
                case 16:
                    return "P";
                case 17:
                    return "Q";
                case 18:
                    return "R";
                case 19:
                    return "S";
                case 20:
                    return "T";
                case 21:
                    return "U";
                case 22:
                    return "V";
                case 23:
                    return "W";
                case 24:
                    return "X";
                case 25:
                    return "Y";
                case 26:
                    return "Z";
                default:
                    return "";
            }
        }


    }
}