C#操作excel幫助類


using Microsoft.Office.Interop.Excel;
using System;

public class ExcelEditHelper
{
    public string mFilename;
    public Application app;
    public Workbooks wbs;
    public Workbook wb;
    public Worksheets wss;
    public Worksheet ws;

    /// <summary>
    /// 創建一個Excel對象
    /// </summary>
    public void Create()
    {
        app = new Application();
        wbs = app.Workbooks;
        wb = wbs.Add(true);
    }

    /// <summary>
    /// 打開一個Excel文件
    /// </summary>
    /// <param name="FileName">excel文件名,包括文件路徑</param>
    public void Open(string FileName)
    {
        object missing = System.Reflection.Missing.Value;
        app = new Application();
        wbs = app.Workbooks;
        wb = wbs.Add(FileName);
        wb = wbs.Open(FileName, missing, true, missing, missing, missing, missing, missing, missing, true, missing, missing, missing, missing, missing);
        mFilename = FileName;
    }

    /// <summary>
    /// 獲取一個工作表
    /// </summary>
    /// <param name="SheetName">工作表名稱</param>
    /// <returns></returns>
    public Worksheet GetSheet(string SheetName)
    {
        Worksheet s = (Worksheet)wb.Worksheets[SheetName];
        return s;
    }

    /// <summary>
    /// 添加一個工作表
    /// </summary>
    /// <param name="SheetName">工作表名稱</param>
    /// <returns></returns>
    public Worksheet AddSheet(string SheetName)
    {
        Worksheet s = (Worksheet)wb.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        s.Name = SheetName;
        return s;
    }

    /// <summary>
    /// 復制並添加一個工作表
    /// </summary>
    /// <param name="OldSheetName"> 被復制工作表</param>
    /// <param name="NewSheetName">新表</param>
    public void CloneSheet(string OldSheetName, string NewSheetName)
    {
        Microsoft.Office.Interop.Excel.Worksheet oldSheet = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[OldSheetName];
        oldSheet.Copy(oldSheet, Type.Missing);
        Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[OldSheetName + " (2)"];
        s.Name = NewSheetName;
    }

    /// <summary>
    /// 刪除一個工作表
    /// </summary>
    /// <param name="SheetName">工作表名稱</param>
    public void DelSheet(string SheetName)
    {
        ((Worksheet)wb.Worksheets[SheetName]).Delete();
    }

    /// <summary>
    /// 重命名一個工作表
    /// </summary>
    /// <param name="OldSheetName">被替換名稱</param>
    /// <param name="NewSheetName">替換名稱</param>
    /// <returns></returns>
    public Worksheet ReNameSheet(string OldSheetName, string NewSheetName)
    {
        Worksheet s = (Worksheet)wb.Worksheets[OldSheetName];
        s.Name = NewSheetName;
        return s;
    }

    /// <summary>
    /// 重命名一個工作表
    /// </summary>
    /// <param name="Sheet">被替換工作表</param>
    /// <param name="NewSheetName">替換名稱</param>
    /// <returns></returns>
    public Worksheet ReNameSheet(Worksheet Sheet, string NewSheetName)
    {
        Sheet.Name = NewSheetName;
        return Sheet;
    }

    /// <summary>
    /// 設置單元格的值
    /// </summary>
    /// <param name="ws">工作表</param>
    /// <param name="x">行標</param>
    /// <param name="y">列標</param>
    /// <param name="value">數據</param>
    public void SetCellValue(Worksheet ws, int x, int y, object value)
    {
        ws.Cells[x, y] = value;
    }

    /// <summary>
    /// 設置單元格的值
    /// </summary>
    /// <param name="ws">工作表名稱</param>
    /// <param name="x">行標</param>
    /// <param name="y">列標</param>
    /// <param name="value">數據</param>
    public void SetCellValue(string ws, int x, int y, object value)
    {
        GetSheet(ws).Cells[x, y] = value;
    }

    /// <summary>
    /// 設置單元格屬性
    /// </summary>
    /// <param name="ws">工作表</param>
    /// <param name="Startx">起始行標</param>
    /// <param name="Starty">起始列標</param>
    /// <param name="Endx">終止行標</param>
    /// <param name="Endy">終止列標</param>
    /// <param name="size">字體大小</param>
    /// <param name="name">字體</param>
    /// <param name="color">顏色</param>
    /// <param name="HorizontalAlignment">對齊方式</param>
    public void SetCellProperty(Worksheet ws, int Startx, int Starty, int Endx, int Endy, int size, string name, Constants color, Constants HorizontalAlignment)
    {
        ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;
        ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;
        ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;
        ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;
    }

    /// <summary>
    /// 設置單元格屬性
    /// </summary>
    /// <param name="ws">工作表名稱</param>
    /// <param name="Startx">起始行標</param>
    /// <param name="Starty">起始列標</param>
    /// <param name="Endx">終止行標</param>
    /// <param name="Endy">終止列標</param>
    /// <param name="size">字體大小</param>
    /// <param name="name">字體</param>
    /// <param name="color">顏色</param>
    /// <param name="HorizontalAlignment">對齊方式</param>
    public void SetCellProperty(string wsn, int Startx, int Starty, int Endx, int Endy, int size, string name, Constants color, Constants HorizontalAlignment)
    {
        Worksheet ws = GetSheet(wsn);
        ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;
        ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;
        ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;
        ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;
    }

    /// <summary>
    /// 合並單元格
    /// </summary>
    /// <param name="ws">工作表</param>
    /// <param name="x1">起始行標</param>
    /// <param name="y1">起始列標</param>
    /// <param name="x2">終止行標</param>
    /// <param name="y2">終止列標</param>
    public void UniteCells(Worksheet ws, int x1, int y1, int x2, int y2)
    {
        ws.get_Range(ws.Cells[x1, y1], ws.Cells[x2, y2]).Merge(Type.Missing);
    }

    /// <summary>
    /// 合並單元格
    /// </summary>
    /// <param name="ws">工作表名稱</param>
    /// <param name="x1">起始行標</param>
    /// <param name="y1">起始列標</param>
    /// <param name="x2">終止行標</param>
    /// <param name="y2">終止列標</param>
    public void UniteCells(string ws, int x1, int y1, int x2, int y2)
    {
        GetSheet(ws).get_Range(GetSheet(ws).Cells[x1, y1], GetSheet(ws).Cells[x2, y2]).Merge(Type.Missing);
    }

    /// <summary>
    /// 將內存中數據表格插入到Excel指定工作表的指定位置
    /// </summary>
    /// <param name="dt">數據表</param>
    /// <param name="ws">工作表名稱</param>
    /// <param name="startX">起始行標</param>
    /// <param name="startY">起始列標</param>
    public void InsertTable(System.Data.DataTable dt, string ws, int startX, int startY)
    {
        for (int i = 0; i <= dt.Rows.Count - 1; i++)
        {
            for (int j = 0; j <= dt.Columns.Count - 1; j++)
            {
                GetSheet(ws).Cells[startX + i, j + startY] = dt.Rows[i][j];
            }
        }
    }

    /// <summary>
    /// 將內存中數據表格插入到Excel指定工作表的指定位置
    /// </summary>
    /// <param name="dt">數據表</param>
    /// <param name="ws">工作表名稱</param>
    /// <param name="startX">起始行標</param>
    /// <param name="startY">起始列標</param>
    public void InsertTable(System.Data.DataTable dt, Worksheet ws, int startX, int startY)
    {
        for (int i = 0; i <= dt.Rows.Count - 1; i++)
        {
            for (int j = 0; j <= dt.Columns.Count - 1; j++)
            {
                ws.Cells[startX + i, j + startY] = dt.Rows[i][j];
            }
        }
    }

    /// <summary>
    /// 保存文檔
    /// </summary>
    /// <returns></returns>
    public bool Save()
    {
        if (mFilename == "")
        {
            return false;
        }
        else
        {
            try
            {
                wb.Save();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
    }

    /// <summary>
    /// 文檔另存為
    /// </summary>
    /// <param name="FileName">文件名(包含路徑)</param>
    /// <returns></returns>
    public bool SaveAs(object FileName)
    {
        try
        {
            wb.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }

    /// <summary>
    /// 關閉一個Excel對象,銷毀對象
    /// </summary>
    public void Close()
    {
        wb.Close(Type.Missing, Type.Missing, Type.Missing);
        wbs.Close();
        app.Quit();
        wb = null;
        wbs = null;
        app = null;
        GC.Collect();
    }
}

 

   注:該類主要來自http://www.cnblogs.com/wangchuang/p/5546345.html使用時需要安裝office Excel功能,項目部署到服務器上使用該類時可能會提示【檢索 COM工廠CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失敗,原因是出現以下錯誤: 80070005。】的錯誤提示;解決方法參照http://blog.csdn.net/qbook/article/details/9130895


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM