C#对excel 的操作

using System;
using System.IO;

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

using System.Runtime.InteropServices;
using Microsoft.Office.Core;
using System.Diagnostics;

namespace LazyUsing
{
   
   
    public class ExcelHelp
    {
   
   
        string myFileName=null;
        Microsoft.Office.Interop.Excel.Application myExcelApp;
        Microsoft.Office.Interop.Excel.Workbook myWorkBook;
        Microsoft.Office.Interop.Excel.Worksheet myWorkSheet;
        public int ExcelColumns {
   
    get; private set; }
        public int ExcelRows {
   
    get; private set; }
        /// <summary>
        /// 构造函数,不创建Excel工作薄
        /// </summary>
        public ExcelHelp(string fileName)
        {
   
   
            //请不要删除以下信息
            //版权:http://XingFuStar.cnblogs.com 
            myFileName = fileName;
        }

        public ExcelHelp()
        {
   
    }

        /// <summary>
        /// 创建Excel工作薄
        /// </summary>
        public void CreateExcelAndWorkBook()
        {
   
   
            myExcelApp = new Microsoft.Office.Interop.Excel.Application();
            myWorkBook = myExcelApp.Application.Workbooks.Add(true);
        }


        [DllImport("kernel32.dll")]
        public static extern IntPtr _lopen(string lpPathName, int iReadWrite);

        [DllImport("kernel32.dll")]
        public static extern bool CloseHandle(IntPtr hObject);

        public const int OF_READWRITE = 2;
        public const int OF_SHARE_DENY_NONE = 0x40;
        public readonly IntPtr HFILE_ERROR = new IntPtr(-1);
        public bool IsOpened(string fileName = null)
        {
   
   
            string tempFile = fileName == null ? myFileName : fileName;
            if (!File.Exists(tempFile))
            {
   
   
                throw new Exception();
            }
            IntPtr vHandle = _lopen(tempFile, OF_READWRITE | OF_SHARE_DENY_NONE);
            if (vHandle == HFILE_ERROR)
            {
   
   

                return true;
            }
            CloseHandle(vHandle);
            return false;
        }

        /// <summary>
        /// 打开一个存在的Excel文件
        /// </summary>
        /// <param name="fileName">Excel完整路径加文件名</param>
        public bool Open()
        {
   
   
            myExcelApp = new Microsoft.Office.Interop.Excel.Application();
            if (File.Exists(myFileName))
            {
   
   
                myWorkBook = myExcelApp.Workbooks.Open(myFileName, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
                return true;
            }
            return false;
        }

        /// <summary>
        /// 打开/创建一个存在的Excel文件
        /// </summary>
        /// <param name="fileName">Excel完整路径加文件名</param>
        public void OpenOrCreate()
        {
   
   
            myExcelApp = new Microsoft.Office.Interop.Excel.Application();
            if (myExcelApp != null)
            {
   
   

                if (myFileName!=null&&File.Exists(myFileName))
                {
   
   
                    myWorkBook = myExcelApp.Workbooks.Open(myFileName, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
                }
                else
                {
   
   
                    myWorkBook = myExcelApp.Workbooks.Add(true);
                }
                //Microsoft.Office.Interop.Excel.Worksheet workSheet = workBook.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
                myExcelApp.Visible = false;
                myExcelApp.DisplayAlerts = false;

                //myWorkBook.SaveAs(myFileName);

                //myWorkBook.Close(false, Missing.Value, Missing.Value);

                //myExcel.Quit();
                ////workSheet = null;
                //myWorkBook = null;
                //myExcel = null;
                //GC.Collect();
            }
            else
            {
   
   
                throw new Exception("ExcelApp is not exists!");
            }
        }

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

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

        public int GetAllSheetNum()
        {
   
   
            return myExcelApp.Worksheets.Count;
        }
        /// <summary>
        /// 激活工作表
        /// </summary>
        /// <param name="sheetName">工作表名</param>
        public void ActivateSheet(string sheetName)
        {
   
   
            myWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)myExcelApp.Worksheets[sheetName];
            myWorkSheet.Activate();
        }



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

        /// <summary>
        /// 删除Sheet
        /// </summary>
        public void DeleteSheet()
        {
   
   
            myExcelApp.DisplayAlerts = false;
            myWorkSheet.Delete();
        }

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

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

        /// <summary>
        /// 重命名工作表
        /// </summary>
        /// <param name="newSheetName">新的工作表名</param>
        public void ReNameSheet(string newSheetName)
        {
   
   
            myWorkSheet.Name = newSheetName;
        }

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

        /// <summary>
        /// 新建工作表
        /// </summary>
        /// <param name="sheetName">工作表名</param>
        public void CreateWorkSheet(string sheetName, object before = null, object after = null, object count = null, object type = null)
        {
   
   
            Microsoft.Office.Interop.Excel.Worksheet newWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)myWorkBook.Worksheets.Add(before == null ? Type.Missing : before, after == null ? Type.Missing : before, count == null ? Type.Missing : before, type == null ? Type.Missing 
前一阵,帮老板开发个数据分析系统,要能根据老板的想法利用选择的数据表的数据字段(包括数据字段之间互相运算生成新字段)来生成各种报表,现在系统完成了,但是还是很不完美。 主要的问题是EXCEL生成图的问题,因为系统的数据表很多个表(数据量也很大,经常上几十万行数据),而且分析字段也不固定,这意味着不好利用实现准备好的模板,c#打开模板把数据写到相应的地方,自动就生成图的方法,因为图的DATATABLE区域是不固定的,行数和列数都不固定。 我只好尝试用C#操作EXCEL类,将DATAVIEW的数据写入EXCEL,然后再生成柱状图,花了2天时间找资料,现在可以生成图了,但是生成的图不好看,细节上无法控制。 我把生成图的代码贴下,我再附上XML方式出EXCEL的代码,只是没办法出图,而且设置文件头为自己想要的格式比较麻烦,要一行行写,还是EXCEL类库方式好,灵活方便,美观。 protected void exportdt_Click(object sender, EventArgs e) { //以下是用MS.Excel类库操作excel工作簿方式输出gridview数据并做图 Excel.Application app = new Excel.Application(); if (app == null) { return; } //以下是EXCEL.APPLICATION控制EXCEL方法 app.Visible = true; //如果只想用程序控制该excel而不想让用户操作时候,可以设置为false app.UserControl = true; app.DisplayAlerts=false; Excel.Workbooks workbooks = app.Workbooks;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值