C# 操作Excel 的函数

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop;
using Microsoft.Office.Core;
using System.IO;
using System.Windows.Forms;
using System.Data;
using System.Reflection;

namespace WinFormsApplication
{
    public class ExcelLib
    {
        //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wrcore/html/wrgrfexcelapplicationobject.asp
        #region Variables
        private Microsoft.Office.Interop.Excel.Application excelApplication = null;
        private Microsoft.Office.Interop.Excel.Workbooks excelWorkBooks = null;
        private Microsoft.Office.Interop.Excel.Workbook excelWorkBook = null;
        private Microsoft.Office.Interop.Excel.Worksheet excelWorkSheet = null;
        private Microsoft.Office.Interop.Excel.Range excelRange = null;//Excel Range Object,多¨¤种?用®?途ª?
        private Microsoft.Office.Interop.Excel.Range excelCopySourceRange = null;//Excel Range Object
        private int excelActiveWorkSheetIndex;          //活?动¡¥工¡è作Á¡Â表À¨ª索¡Â引°y
        private string excelOpenFileName = "";      //操¨´作Á¡ÂExcel的Ì?路¡¤径?
        private string excelSaveFileName = "";      //保À¡ê存ä?Excel的Ì?路¡¤径?
        #endregion
        #region Properties
        public int ActiveSheetIndex
        {
            get
            {
                return excelActiveWorkSheetIndex;
            }
            set
            {
                excelActiveWorkSheetIndex = value;
            }
        }
        public string OpenFileName
        {
            get
            {
                return excelOpenFileName;
            }
            set
            {
                excelOpenFileName = value;
            }
        }
        public string SaveFileName
        {
            get
            {
                return excelSaveFileName;
            }
            set
            {
                excelSaveFileName = value;
            }
        }
        #endregion
        //
        //--------------------------------------------------------------------------------------------------------
        /// <summary>
        /// 构1造¨¬函¡¥数ºy;ê?
        /// </summary>
        public ExcelLib()
        {
            excelApplication = null;//Excel Application Object
            excelWorkBooks = null;//Workbooks
            excelWorkBook = null;//Excel Workbook Object
            excelWorkSheet = null;//Excel Worksheet Object
            ActiveSheetIndex = 1;           //默?认¨?值¦Ì活?动¡¥工¡è作Á¡Â簿?为a第̨²一°?个?;ê?设¦¨¨置?活?动¡¥工¡è作Á¡Â簿?请?参?阅?SetActiveWorkSheet()
        }
        /// <summary>
        /// 以°?excelOpenFileName为a模¡ê板ã?新?建¡§Excel文?件t
        /// </summary>
        public bool OpenExcelFile()
        {
            if (excelApplication != null) CloseExcelApplication();
            //检¨¬查¨¦文?件t是º?否¤?存ä?在¨²
            if (excelOpenFileName == "")
            {
                throw new Exception("请?选?择?文?件t!ê?");
            }
            if (!File.Exists(excelOpenFileName))
            {
                throw new Exception(excelOpenFileName + "该?文?件t不?存ä?在¨²!ê?");//该?异°¨¬常¡ê如¨?何?处ä|理¤¨ª,ê?由®¨¦什º2么¡ä处ä|理¤¨ª?ê??ê??ê??ê?
            }
            try
            {
                excelApplication = new Microsoft.Office.Interop.Excel.ApplicationClass();
                excelWorkBooks = excelApplication.Workbooks;
                excelWorkBook = ((Microsoft.Office.Interop.Excel.Workbook)excelWorkBooks.Open(excelOpenFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value));
                excelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelWorkBook.Worksheets[excelActiveWorkSheetIndex];
                excelApplication.Visible = false;
                return true;
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                MessageBox.Show("(1)没?有®D安ã2装Á¡ãExcel 2003;ê?(2)或¨°没?有®D安ã2装Á¡ãExcel 2003 .NET 可¨¦编À¨¤程¨¬性?支¡ì持?;ê?/n详¨º细?信?息¡é:êo"
                    + e.Message, "提¬¨¢示º?", MessageBoxButtons.OK, MessageBoxIcon.Information);
                //throw new Exception(e.Message);
                return false;
            }
        }
        /// <summary>
        /// 读¨¢取¨?一°?个?Cell的Ì?值¦Ì
        /// </summary>
        /// <param name="CellRowID">要°a读¨¢取¨?的Ì?Cell的Ì?行D索¡Â引°y</param>
        /// <param name="CellColumnID">要°a读¨¢取¨?的Ì?Cell的Ì?列¢D索¡Â引°y</param>
        /// <returns>Cell的Ì?值¦Ì</returns>
        public string getOneCellValue(int CellRowID, int CellColumnID)
        {
            if (CellRowID <= 0)
            {
                throw new Exception("行D索¡Â引°y超?出?范¤?围¡ì!ê?");
            }
            string sValue = "";
            try
            {
                sValue = ((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID]).Text.ToString();
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
            return (sValue);
        }
        /// <summary>
        /// 读¨¢取¨?一°?个?连¢?续?区?域®¨°的Ì?Cell的Ì?值¦Ì(矩?形?区?域®¨°,ê?包㨹含?一°?行D或¨°一°?列¢D,或¨°多¨¤行D,ê?多¨¤列¢D),ê?返¤¦Ì回?一°?个?一°?维?字Á?符¤?串ä?数ºy组Á¨¦。¡ê
        /// </summary>
        /// <param name="StartCell">StartCell是º?要°a写¡ä入¨?区?域®¨°的Ì?左Á¨®上¦?角?单Ì£¤元a格?</param>
        /// <param name="EndCell">EndCell是º?要°a写¡ä入¨?区?域®¨°的Ì?右®¨°下?角?单Ì£¤元a格?</param>
        /// <returns>值¦Ì的Ì?集¡¥合?</returns>
        public string[] getCellsValue(string StartCell, string EndCell)
        {
            string[] sValue = null;
            //try
            //{
            excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.get_Range(StartCell, EndCell);
            sValue = new string[excelRange.Count];
            int rowStartIndex = ((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.get_Range(StartCell, StartCell)).Row;      //起e始º?行D号?
            int columnStartIndex = ((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.get_Range(StartCell, StartCell)).Column;    //起e始º?列¢D号?
            int rowNum = excelRange.Rows.Count;                 //行D数ºy目?
            int columnNum = excelRange.Columns.Count;               //列¢D数ºy目?
            int index = 0;
            for (int i = rowStartIndex; i < rowStartIndex + rowNum; i++)
            {
                for (int j = columnStartIndex; j < columnNum + columnStartIndex; j++)
                {
                    //读¨¢到Ì?空?值¦Ìnull和¨ª读¨¢到Ì?空?串ä?""分¤?别Àe处ä|理¤¨ª
                    sValue[index] = ((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[i, j]).Text.ToString();
                    index++;
                }
            }
            //}
            //catch (Exception e)
            //{
            //    CloseExcelApplication();
            //    throw new Exception(e.Message);
            //}
            return (sValue);
        }
        /// <summary>
        /// 读¨¢取¨?所¨´有®D单Ì£¤元a格?的Ì?数ºy据Y(矩?形?区?域®¨°),ê?返¤¦Ì回?一°?个?datatable.假¨´设¦¨¨所¨´有®D单Ì£¤元a格?靠?工¡è作Á¡Â表À¨ª左Á¨®上¦?区?域®¨°。¡ê
        /// </summary>
        public System.Data.DataTable getAllCellsValue()
        {
            int columnCount = getTotalColumnCount();
            int rowCount = getTotalRowCount();
            System.Data.DataTable dt = new System.Data.DataTable();
            //设¦¨¨置?datatable列¢D的Ì?名?称?
            for (int columnID = 1; columnID <= columnCount; columnID++)
            {
                dt.Columns.Add(((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[1, columnID]).Text.ToString());
            }
            for (int rowID = 2; rowID <= rowCount; rowID++)
            {
                DataRow dr = dt.NewRow();
                for (int columnID = 1; columnID <= columnCount; columnID++)
                {
                    dr[columnID - 1] = ((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[rowID, columnID]).Text.ToString();
                    //读¨¢到Ì?空?值¦Ìnull和¨ª读¨¢到Ì?空?串ä?""分¤?别Àe处ä|理¤¨ª
                }
                dt.Rows.Add(dr);
            }
            return (dt);
        }
        public int getTotalRowCount()
        {//当Ì¡À前¡ã活?动¡¥工¡è作Á¡Â表À¨ª中D有®D效¡ì行D数ºy(总Á¨¹行D数ºy)
            int rowsNumber = 0;
            try
            {
                while (true)
                {
                    if (((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[rowsNumber + 1, 1]).Text.ToString().Trim() == "" &
                           ((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[rowsNumber + 2, 1]).Text.ToString().Trim() == "" &
                           ((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[rowsNumber + 3, 1]).Text.ToString().Trim() == "")
                        break;
                    rowsNumber++;
                }
            }
            catch
            {
                return -1;
            }
            return rowsNumber;
        }
        /// <summary>
        /// 当Ì¡À前¡ã活?动¡¥工¡è作Á¡Â表À¨ª中D有®D效¡ì列¢D数ºy(总Á¨¹列¢D数ºy)
        /// </summary>
        /// <param></param>
        public int getTotalColumnCount()
        {
            int columnNumber = 0;
            try
            {
                while (true)
                {
                    if (((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[1, columnNumber + 1]).Text.ToString().Trim() == "" &
                           ((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[1, columnNumber + 2]).Text.ToString().Trim() == "" &
                           ((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[1, columnNumber + 3]).Text.ToString().Trim() == "")
                        break;
                    columnNumber++;
                }
            }
            catch
            {
                return -1;
            }
            return columnNumber;
        }
        /// <summary>
        /// 向¨°一°?个?Cell写¡ä入¨?数ºy据Y
        /// </summary>
        /// <param name="CellRowID">CellRowID是º?cell的Ì?行D索¡Â引°y</param>
        /// <param name="CellColumnID">CellColumnID是º?cell的Ì?列¢D索¡Â引°y</param>
        ///<param name="Value">要°a写¡ä入¨?该?单Ì£¤元a格?的Ì?数ºy据Y值¦Ì</param>
        public void setOneCellValue(int CellRowID, int CellColumnID, string Value)
        {
            try
            {
                excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID];
                excelRange.Value2 = Value;//Value2?
                //Gets or sets the value of the NamedRange control.
                //The only difference between this property and the Value property is that Value2 is not a parameterized property.
                excelRange = null;
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 设¦¨¨置?活?动¡¥工¡è作Á¡Â表À¨ª
        /// </summary>
        /// <param name="SheetIndex">要°a设¦¨¨置?为a活?动¡¥工¡è作Á¡Â表À¨ª的Ì?索¡Â引°y值¦Ì</param>
        public void SetActiveWorkSheet(int SheetIndex)
        {
            if (SheetIndex <= 0)
            {
                throw new Exception("索¡Â引°y超?出?范¤?围¡ì!ê?");
            }
            try
            {
                ActiveSheetIndex = SheetIndex;
                excelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelWorkBook.Worksheets[ActiveSheetIndex];
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 向¨°连¢?续?区?域®¨°一°?次ä?性?写¡ä入¨?数ºy据Y;ê?只?有®D在¨²区?域®¨°连¢?续?和¨ª写¡ä入¨?的Ì?值¦Ì相¨¤同ª?的Ì?情¨¦况?下?可¨¦以°?使º1用®?方¤?法¤¡§
        /// </summary>
        /// <param name="StartCell">StartCell是º?要°a写¡ä入¨?区?域®¨°的Ì?左Á¨®上¦?角?单Ì£¤元a格?</param>
        /// <param name="EndCell">EndCell是º?要°a写¡ä入¨?区?域®¨°的Ì?右®¨°下?角?单Ì£¤元a格?</param>
        /// <param name="Value">要°a写¡ä入¨?指?定¡§区?域®¨°所¨´有®D单Ì£¤元a格?的Ì?数ºy据Y值¦Ì</param>
        public void setCellsValue(string StartCell, string EndCell, string Value)
        {
            try
            {
                excelRange = excelWorkSheet.get_Range(StartCell, EndCell);
                excelRange.Value2 = Value;
                excelRange = null;
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 给?一°?行D写¡ä数ºy据Y
        /// </summary>
        public void setOneLineValues(int LineID, int StartCellColumnID, int EndCellColumnID, string[] Values)////已°?经-测a试º?
        {
            //用®?1-19号?元a素?
            //if (Values.Length!=EndCellColumnID-StartCellColumnID)
            //{
            //    throw new Exception("单Ì£¤元a格?数ºy目?与®?提¬¨¢供?的Ì?值¦Ì的Ì?数ºy目?不?一°?致?!ê?");
            //}
            for (int i = StartCellColumnID; i <= EndCellColumnID; i++)
            {
                setOneCellValue(LineID, i, Values[i]);
            }
        }
        public void setCellsBorder(string startCell, string endCell)
        {
            //设¦¨¨置?某3个?范¤?围¡ì内¨²的Ì?单Ì£¤元a格?的Ì?边À?框¨°
            excelRange = excelWorkSheet.get_Range(startCell, endCell);
            excelRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            excelRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            excelRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            excelRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            excelRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            //excelRange.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;
        }
        public void setOneCellBorder(int CellRowID, int CellColumnID)
        {
            //设¦¨¨置?某3个?单Ì£¤元a格?的Ì?边À?框¨°
            excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID];
            excelRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            excelRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            excelRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            excelRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            //excelRange.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;
            //excelRange.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;
        }
        public void SetColumnWidth(string startCell, string endCell, int size)
        {
            //设¦¨¨置?某3个?范¤?围¡ì内¨²的Ì?单Ì£¤元a格?的Ì?列¢D的Ì?宽¨ª度¨¨
            excelRange = excelWorkSheet.get_Range(startCell, endCell);
            excelRange.ColumnWidth = size;
        }
        public void SetOneCellFont(int CellRowID, int CellColumnID, string fontName, int fontSize)
        {
            excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID];
            excelRange.Font.Name = fontName;
            excelRange.Font.Size = fontSize;
        }
        public void SetOneCellColor(int CellRowID, int CellColumnID, ColorIndex color)
        {
            excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID];
            excelRange.Font.ColorIndex = color;
        }

        public void SetOneCellHorizontalAlignment(int CellRowID, int CellColumnID, Microsoft.Office.Interop.Excel.Constants alignment)
        {
            excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID];
            excelRange.HorizontalAlignment = alignment;
        }
        public void SetOneCellColumnWidth(int CellRowID, int CellColumnID, int size)
        {
            //设¦¨¨置?某3个?单Ì£¤元a格?的Ì?列¢D的Ì?宽¨ª度¨¨
            excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID];
            excelRange.ColumnWidth = size;
        }
        /// <summary>
        /// 设¦¨¨置?一°?个?Cell的Ì?数ºy据Y格?式º?
        /// </summary>
        /// <param name="CellRowID">CellRowID是º?cell的Ì?行D索¡Â引°y</param>
        /// <param name="CellColumnID">CellColumnID是º?cell的Ì?列¢D索¡Â引°y</param>
        ///<param name="Value">数ºy据Y格?式º?</param>
        public void setOneCellNumberFormat(int CellRowID, int CellColumnID, string numberFormat)
        {
            try
            {
                excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID];
                excelRange.NumberFormatLocal = numberFormat;
                excelRange = null;
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
        }
        public void SetRowHeight(string startCell, string endCell, int size)
        {
            //设¦¨¨置?某3个?范¤?围¡ì内¨²的Ì?单Ì£¤元a格?的Ì?行D的Ì?高?度¨¨
            excelRange = excelWorkSheet.get_Range(startCell, endCell);
            excelRange.RowHeight = size;
        }
        public void SetRowHeight(int CellRowID, int CellColumnID, float size)
        {
            //设¦¨¨置?某3个?范¤?围¡ì内¨²的Ì?单Ì£¤元a格?的Ì?行D的Ì?高?度¨¨
            excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID];
            excelRange.RowHeight = size;
        }
        public void SetOneCellRowHeight(int CellRowID, int CellColumnID, int size)
        {
            //设¦¨¨置?某3个?单Ì£¤元a格?的Ì?行D的Ì?高?度¨¨
            excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellRowID, CellColumnID];
            excelRange.RowHeight = size;
        }
        /// <summary>
        /// 拷?贝À¡ä区?域®¨°.限T制?:êo在¨²同ª?一°?个?工¡è作Á¡Â表À¨ª中D复¡ä制?
        /// </summary>
        /// <param name="SourceStart">源¡ä区?域®¨°的Ì?左Á¨®上¦?角?单Ì£¤元a格?</param>
        /// <param name="SourceEnd">源¡ä区?域®¨°的Ì?右®¨°下?角?单Ì£¤元a格?</param>
        /// <param name="DesStart">目?标À¨º区?域®¨°的Ì?左Á¨®上¦?角?单Ì£¤元a格?</param>
        /// <param name="DesEnd">目?标À¨º区?域®¨°的Ì?右®¨°下?角?单Ì£¤元a格?</param>
        public void CopyCells(string SourceStart, string SourceEnd, string DesStart, string DesEnd)
        {
            try
            {
                excelCopySourceRange = excelWorkSheet.get_Range(SourceStart, SourceEnd);
                excelRange = excelWorkSheet.get_Range(DesStart, DesEnd);
                excelCopySourceRange.Copy(excelRange);
                excelCopySourceRange = null;
                excelRange = null;
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
        }
        public void CopyWorksheet(int SourceWorksheetIndex, int DesWorksheetIndex)
        {
            try
            {
                //           Sheets("Sheet2").Select
                //Sheets("Sheet2").Copy After:=Sheets(3)
                Microsoft.Office.Interop.Excel.Worksheet sheetSource = (Microsoft.Office.Interop.Excel.Worksheet)excelWorkBook.Worksheets[SourceWorksheetIndex];
                sheetSource.Select(Missing.Value);
                Microsoft.Office.Interop.Excel.Worksheet sheetDest = (Microsoft.Office.Interop.Excel.Worksheet)excelWorkBook.Worksheets[DesWorksheetIndex];
                sheetSource.Copy(Missing.Value, sheetDest);
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 插?入¨?一°?行D
        /// </summary>
        /// <param name="CellRowID">要°a插?入¨?所¨´在¨²行D的Ì?索¡Â引°y位?置?,ê?插?入¨?后¨®其?原-有®D行D下?移°?</param>
        /// <param name="RowNum">要°a插?入¨?行D的Ì?个?数ºy</param>
        public void InsertRow(int CellRowID, int RowNum)//插?入¨?空?行D
        {
            if (CellRowID <= 0)
            {
                throw new Exception("行D索¡Â引°y超?出?范¤?围¡ì!ê?");
            }
            if (RowNum <= 0)
            {
                throw new Exception("插?入¨?行D数ºy无T效¡ì!ê?");
            }
            try
            {
                excelRange = (Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Rows[CellRowID, Missing.Value];
                for (int i = 0; i < RowNum; i++)
                {
                    excelRange.Insert(Microsoft.Office.Interop.Excel.XlDirection.xlDown, Missing.Value);
                }
                excelRange = null;
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 保À¡ê存ä?Excel文?件t
        /// </summary>
        public Microsoft.Office.Interop.Excel.Range FindFirstRange(Microsoft.Office.Interop.Excel.Range xlRange, string FindText)//查¨¦找¨°//没?有®D测a试º?
        {
            //查¨¦找¨°第̨²一°?个?满¨²足Á?的Ì?区?域®¨°
            //Search for the first match
            Microsoft.Office.Interop.Excel.Range firstFind = null;
            firstFind = xlRange.Find(FindText, Missing.Value, Microsoft.Office.Interop.Excel.XlFindLookIn.xlValues, Microsoft.Office.Interop.Excel.XlLookAt.xlPart, Microsoft.Office.Interop.Excel.XlSearchOrder.xlByRows, Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext, false, Missing.Value, Missing.Value);
            return firstFind;  //如¨?果?没?找¨°到Ì?,ê?返¤¦Ì回?空?
        }
        //http://msdn.microsoft.com/library/en-us/dv_wrcore/html/wrtskHowToSearchForTextInWorksheetRanges.asp?frame=true
        /// <summary>
        /// 当Ì¡À前¡ã活?动¡¥工¡è作Á¡Â表À¨ª中D有®D效¡ì行D数ºy(总Á¨¹行D数ºy)
        /// </summary>
        /// <param></param>
        /// <summary>
        /// 判D断?单Ì£¤元a格?是º?否¤?有®D数ºy据Y
        /// </summary>
        public bool CellValueIsNull(int CellLineID, int CellColumnID)////已°?经-测a试º?
        {
            //判D断?单Ì£¤元a格?是º?否¤?有®D数ºy据Y
            if ((((Microsoft.Office.Interop.Excel.Range)excelWorkSheet.Cells[CellLineID, CellColumnID]).Text.ToString().Trim() != ""))
                return false;
            return true;
        }
        public void newWorkbook(string excelTemplate, string fileName)
        {
            //以°?excelTemplate为a模¡ê板ã?新?建¡§文?件tfileName
            //excelApplication.
            excelWorkBook = excelWorkBooks.Add(excelTemplate);
            SaveFileName = "";
            SaveExcel();
        }
        public void newWorksheet()
        {
            excelWorkBook.Worksheets.Add(Missing.Value, Missing.Value, 1, Missing.Value);
        }
        public void setWorksheetName(int sheetIndex, string worksheetName)
        {
            // Missing.Value
            Microsoft.Office.Interop.Excel._Worksheet sheet = (Microsoft.Office.Interop.Excel._Worksheet)(excelWorkBook.Worksheets[(object)sheetIndex]);
            sheet.Name = worksheetName;
        }
        public void mergeOneLineCells(string startCell, string endCell)
        {
            //合?并¡é一°?行D单Ì£¤元a格?
            excelRange = excelWorkSheet.get_Range(startCell, endCell);
            //excelRange.Merge(true);
            excelRange.MergeCells = true;
        }
        public void HorizontalAlignmentCells(string startCell, string endCell, Microsoft.Office.Interop.Excel.Constants alignment)
        {
            //水?平?对?齐?一°?行D单Ì£¤元a格?
            excelRange = excelWorkSheet.get_Range(startCell, endCell);
            excelRange.HorizontalAlignment = alignment;
        }
        public void VerticalAlignmentCells(string startCell, string endCell, Microsoft.Office.Interop.Excel.Constants alignment)
        {
            //垂ä1直¡À对?齐?一°?行D单Ì£¤元a格?
            excelRange = excelWorkSheet.get_Range(startCell, endCell);
            excelRange.VerticalAlignment = alignment;
        }
        //实º¦Ì现?列¢D号?-〉¦Ì字Á?母? (26-〉¦ÌZ,27->AA)
        private string ConvertColumnIndexToChar(int columnIndex)
        {
            if (columnIndex < 1 || columnIndex > 256)
            {
                MessageBox.Show("columnIndex=" + columnIndex + ",超?出?了¢?有®D效¡ì范¤?围¡ì(ꡧ1-256)ê?");
                return "A";
            }
            if (columnIndex >= 1 && columnIndex <= 26)//1--26
            {
                return "AA";
            }
            if (columnIndex >= 27 && columnIndex <= 256)//27--256
            {
                return "AA";
            }
            return "A";
        }
        //字Á?母?-〉¦Ì列¢D号? Z-〉¦Ì26
        public void SaveExcel()
        {
            if (excelSaveFileName == "")
            {
                throw new Exception("未¡ä指?定¡§要°a保À¡ê存ä?的Ì?文?件t名?");
            }
            try
            {
                //excelWorkSheet.(excelSaveFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value);
                excelWorkSheet.SaveAs(excelSaveFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value);
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
        }
        //--------------------------------------------------------------------------------------------------------
        /// <summary>
        /// 保À¡ê存ä?Excel文?件t,ê?格?式º?xml.
        /// </summary>
        public void SaveExcelAsXML()
        {
            if (excelSaveFileName == "")
            {
                throw new Exception("未¡ä指?定¡§要°a保À¡ê存ä?的Ì?文?件t名?");
            }
            try
            {
                //excelWorkSheet.SaveAs(excelSaveFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value);
                excelWorkSheet.SaveAs(excelSaveFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlXMLSpreadsheet, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value);
            }
            catch (Exception e)
            {
                CloseExcelApplication();
                throw new Exception(e.Message);
            }
        }
        //--------------------------------------------------------------------------------------------------------
        /// <summary>
        /// 关?闭À?Excel文?件t,ê?释º¨ª放¤?对?象¨®;ê?最Á?后¨®一°?定¡§要°a调Ì¡Â用®?此ä?函¡¥数ºy,ê?否¤?则¨°会¨¢引°y起e异°¨¬常¡ê
        /// </summary>
        /// <param></param>
        public void CloseExcelApplication()
        {
            try
            {
                excelWorkBooks = null;
                excelWorkBook = null;
                excelWorkSheet = null;
                excelRange = null;
                if (excelApplication != null)
                {
                    excelApplication.Workbooks.Close();
                    //Object missing = Type.Missing;
                    excelApplication.Quit();
                    excelApplication = null;
                    //ReleaseAllRef(excelApplication);//Error
                }
            }
            finally
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }
        private void ReleaseAllRef(Object obj)
        {//ReleaseComObject()方¤?法¤¡§可¨¦以°?使º1RCW减?少¦¨´一°?个?对?COM组Á¨¦件t的Ì?引°y用®?,ê?并¡é返¤¦Ì回?减?少¦¨´一°?个?引°y用®?后¨®RCW对?COM组Á¨¦件t的Ì?剩º¡ê余®¨¤引°y用®?数ºy量¢?。¡ê
            //我¨°们?用®?一°?个?循-环¡¤,ê?就¨ª可¨¦以°?让¨?RCW将?所¨´有®D对?COM组Á¨¦件t的Ì?引°y用®?全¨?部?去¨£¤掉Ì?。¡ê
            try
            {
                while (System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) > 1) ;
            }
            finally
            {
                obj = null;
            }
        }
    }
    public enum ColorIndex
    {
        无T色¦? = -4142,
        自Á?动¡¥ = -4105,
        黑¨²色¦? = 1,
        褐?色¦? = 53,
        橄¦?榄¦- = 52,
        深¦?绿¨¬ = 51,
        深¦?青¨¤ = 49,
        深¦?蓝¤? = 11,
        靛Ì?蓝¤? = 55,
        灰¨°色¦?80 = 56,
        深¦?红¨¬ = 9,
        橙¨¨色¦? = 46,
        深¦?黄? = 12,
        绿¨¬色¦? = 10,
        青¨¤色¦? = 14,
        蓝¤?色¦? = 5,
        蓝¤?灰¨° = 47,
        灰¨°色¦?50 = 16,
        红¨¬色¦? = 3,
        浅3橙¨¨色¦? = 45,
        酸¨¢橙¨¨色¦? = 43,
        海¡ê绿¨¬ = 50,
        水?绿¨¬色¦? = 42,
        浅3蓝¤? = 41,
        紫Á?罗T兰¤? = 13,
        灰¨°色¦?40 = 48,
        粉¤?红¨¬ = 7,
        金e色¦? = 44,
        黄?色¦? = 6,
        鲜¨º绿¨¬ = 4,
        青¨¤绿¨¬ = 8,
        天¬¨¬蓝¤? = 33,
        梅¡¤红¨¬ = 54,
        灰¨°色¦?25 = 15,
        玫¦Ì瑰?红¨¬ = 38,
        茶¨¨色¦? = 40,
        浅3黄? = 36,
        浅3绿¨¬ = 35,
        浅3青¨¤绿¨¬ = 34,
        淡Ì-蓝¤? = 37,
        淡Ì-紫Á? = 39,
        白ã¡Á色¦? = 2
    }
}
时间: 2024-07-30 15:55:53

C# 操作Excel 的函数的相关文章

【转】.NET NPOI操作Excel常用函数

最近因项目接触了NPOI,感觉还是蛮不错的,网络上的教程普遍版本较老,本篇记录所常用操作,采用NPOI 2.0版本. 推荐: NPOI官方网站 NPOI 1.2.4/1.2.5 官方教程 新建Excel HSSFWorkbook hssfworkbook =newHSSFWorkbook(); ISheet sheet1 = hssfworkbook.CreateSheet("sheet1");//建立Sheet1 保存(导出)Excel FileStream file =newFil

Delphi Excel操作,写了个ADODataSet转Excel的函数作为后期学习的例子

使用该函数需要先Use Excel2010 //DataSet导出Excel2010格式//FileName=待导出的Excel的文件名,不带路径以及后缀:TitleLine1=导出后Excel第一表头,TitleLine2=Excel第二表头:CellsNames=Excel表格中Field的Title名称://IsOpen=是否马上打开 procedure sysDSetToXlsx(DSet: TADODataSet;FileName,TitleLine1,TitleLine2:Strin

python操作excel

python操作exce的方式: 使用win32com 使用xlrd(读excel).xlwt(写excel) 1.使用win32com方式 代码: # coding=utf-8 from win32com.client import Dispatch import pywintypes ''' 查看excel最大行数和列数 打开一个空白新建EXCEL表格,按CTRL+下箭头,可以查看到最大行数:按CTRL+右箭头, 可以查看到最大列标(若想显示列数,可在最右一列的某单元格中输入=column(

POI操作EXCEL(二)

原文转自:http://www.tqcto.com/article/code/295025.html java当初把核心处理设成Unicode,带来的好处是另代码适应了多语言环境.然而由于老外的英语只有26个字母,有些情况下,一些程序员用8 位的byte处理,一不小心就去掉了CJK的高位.或者是由于习惯在程序中采用硬编码,还有多种原因,使得许多java应用在CJK的处理上很烦恼.还好 在POI HSSF中考虑到这个问题,可以设置encoding为双字节. POI可以到www.apache.org

C#操作Excel的技巧与方法 设置单元格等

C#操作Excel可以分为客户端和插件版本,区别就是是否需要Excel环境,功能实现一样 一.通用操作与处理(有点乱有时间再整理) 1:工程对excel类库的导入,如: c:\program files\Microsoft office\offiece11\excel.exe 2:命名控件的引入: using Microsoft.office.Interop.Excel; 3:如果是对一个已经存在的excel文件进行操作则: Application app=new Application();

关于MFC操作Excel的几点心得

一.操作多个sheet时,记得在操作前先选中要操作的sheet 如将sheet1内的range(A1:An)的内容复制到sheet2内,“类Range的Select方法无效” 可在range.Select();前加sheet.Activate(); 二.使用CFileDiaDlg打开多个文件时,记得要为文件名设定缓存 CFileDialog内置的文件名缓存长度只有200,但是很多时候,文件的路径远大于这个数,为了保险起见,要自己设定一个文件名缓存. dlgFile.m_ofn.nMaxFile

java操作Excel

一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象.它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等. 二.HSSF概况 HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”.也许HSSF的名字有点

八、python操作excel及网络编程和异常处理

一.python操作excel 1.读excel,xlrd模块用来读excel # book = xlrd.open_workbook(r'students.xlsx')#打开excel# print(book.sheet_names())#获取所有sheet的名字# sheet = book.sheet_by_index(0)#根据sheet页的位置去取sheet# sheet2 = book.sheet_by_name('Sheet2')#根据sheet页的名字获取sheet页# print

Qt QAxObject操作excel文件过程总结(转):

正好同事问道Qt下操作excel. 转自:http://blog.csdn.net/a156392343/article/details/48092515 配制方面: 1.确保Excel软件在本地服务器注册成功,没注册成功的可以通过 在运行中"E:\program Files\Microsoft Office\Office12\EXCEL.EXE" /regserver 手动注册,注意路径要用自己的excel路径. 2.确保组件配制正确,运行命令:dcomcnfg,查看DCOM配置下是