Excel操控方法之Com組件


using Microsoft.Office.Interop.Excel;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace ComTest
{
    public class MSExcel
    {
        //Excel重要元素節點
        private Microsoft.Office.Interop.Excel.Application app;
        private Workbooks workbooks;
        private Workbook workbook;
        private string excelPath;
        public MSExcel(string excelPath)
        {
            init();
            this.excelPath = excelPath;
        }
        //Excel
        private void init()
        {
            app = new Microsoft.Office.Interop.Excel.Application();
            app.Visible = false;
            workbooks = app.Workbooks;
        }
        //載入Excel
        public bool LoadExcel()
        {
            workbook = workbooks.Open(excelPath);
            return !workbook.ReadOnly;
        }
        //創建Excel
        public void CreateExcel(string worksheetName)
        {
            workbook = workbooks.Add(true);
            ((Worksheet)workbook.Worksheets[1]).Name = worksheetName;
            workbook.SaveAs(excelPath);
        }
        //強制殺掉Excel的所有進程
        public void KillExcel()
        {
            Close();
            Dispose();
            Process[] procs = Process.GetProcessesByName("excel");
            foreach (Process pro in procs)
            {
                pro.Kill();
            }
            init();
            LoadExcel();
            Save();
            Close();
            Dispose();
            init();
            LoadExcel();
        }
        //判斷指定名稱的工作表是否存在
        public bool IsWorksheetExist(string worksheetName)
        {
            foreach (Worksheet worksheet in workbook.Worksheets)
            {
                if (worksheet != null && worksheet.Name != null && worksheet.Name == worksheetName)
                {
                    return true;
                }
            }
            return false;
        }
        //添加指定名稱工作表
        public void AddWorksheet(string worksheetName)
        {
            workbook.Worksheets.Add(Type.Missing, workbook.Worksheets[workbook.Worksheets.Count], 1, Type.Missing);
            ((Worksheet)workbook.Worksheets[workbook.Worksheets.Count]).Name = worksheetName;
            workbook.Save();
        }
        //獲取指定名稱的工作表
        public Worksheet GetWorksheet(string worksheetName)
        {
            foreach(Worksheet worksheet in workbook.Worksheets)
            {
                if(worksheet!=null && worksheet.Name!=null && worksheet.Name==worksheetName)
                {
                    return worksheet;
                }
            }
            return null;
        }
        //Excel文檔保存
        public void Save()
        {
            workbook.Save();
        }
        //Excel文檔另存爲
        public void SaveAs()
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "excel files (*.xls)|*.xls";
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                workbook.SaveCopyAs(saveFileDialog.FileName);
            }
        }
        //關閉Excel文檔
        public void Close()
        {
            if (workbook != null)
            {
                workbook.Close();
                workbook = null;
            }
        }
        //釋放當前Excel進程
        public void Dispose()
        {
            if (workbooks != null)
            {
                workbooks.Close();
                workbooks = null;
            }
            if (app != null)
            {
                app.Quit();
                app = null;
            }
        }
        public class MSSheet
        {
            private Worksheet worksheet;
            private int lastRow = 1;
            private int lastCol = 1;
            public int MaxRow
            {
                get
                {
                    return worksheet.UsedRange.Rows.Count;
                }
            }
            public MSSheet(Worksheet worksheet)
            {
                this.worksheet = worksheet;
                lastRow = worksheet.UsedRange.Rows.Count;
                string value = null;
                for (int i = worksheet.UsedRange.Columns.Count; i > 0; i++)
                {
                    value = ((Range)(worksheet.Cells[1, i])).Text.ToString();
                    if (value != null || value != "")
                    {
                        lastCol = i;
                        break;
                    }
                }
            }
            //根據指定名稱尋找第一行中與之內容相同的表格所在的列
            public int GetColIndexByHeaderName(string colName)
            {
                int count = worksheet.UsedRange.Columns.Count + 1;
                for (int i = 1; i < count; i++)
                {
                    if (((Range)(worksheet.Cells[1, i])).Text.ToString() == colName)
                    {
                        return i;
                    }
                }
                worksheet.Cells[1, count] = colName;
                return count;
            }
            //添加一行
            public void AddRow()
            {
                lastRow += 1;
            }
            //添加一個元素
            public void AddCell(object data)
            {
                lastCol += 1;
                write(lastRow, lastCol, false, data, Color.Transparent);
            }
            //添加一個指定背景顏色的元素
            public void AddCell(object data,Color color)
            {
                lastCol += 1;
                write(lastRow, lastCol, false, data, color);
            }
            //添加一個超鏈接
            public void AddHyperlink(object data)
            {
                lastCol += 1;
                write(lastRow, lastCol, true, data, Color.Transparent);
            }
            //添加一個指定背景顏色的超鏈接
            public void AddHyperlink(object data, Color color)
            {
                lastCol += 1;
                write(lastRow, lastCol, true, data, color);
            }
            //指定行和列確定表格位置,寫入內容
            public void Write(int rowIndex, int colIndex, object data)
            {
                write(rowIndex, colIndex, false, data, Color.Transparent);
            }
            //指定行和列確定表格位置,指定背景顏色寫入內容
            public void Write(int rowIndex, int colIndex, object data, Color color)
            {
                write(rowIndex, colIndex, false, data, color);
            }
            //指定行和列確定表格位置,寫入超鏈接
            public void WriteHyperlink(int rowIndex, int colIndex, object data)
            {
                write(rowIndex, colIndex, true, data, Color.Transparent);
            }
            //指定行和列確定表格位置,指定背景顏色寫入超鏈接
            public void WriteHyperlink(int rowIndex, int colIndex, object data, Color color)
            {
                write(rowIndex, colIndex, true, data, color);
            }
            //寫
            private void write(int rowIndex, int colIndex, bool isHyperlink, object data, Color color)
            {
                Range range = (Range)worksheet.Cells[rowIndex, colIndex];
                if (isHyperlink)
                {
                    worksheet.Hyperlinks.Add(range, data.ToString());
                }
                else
                {
                    range.Value2 = data.ToString();
                }
                if (color != Color.Transparent)
                {
                    range.Interior.Color = System.Drawing.ColorTranslator.ToOle(color);
                }
            }
            //讀
            public string Read(int rowIndex, int colIndex)
            {
                return ((Range)(worksheet.Cells[rowIndex, colIndex])).Text.ToString();
            }
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章