C#定制Excel界面并实现与数据库交互的方法

论坛 期权论坛 期权     
niminba   2021-5-16 16:03   8635   0

Excel是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策操作,广泛地应用于管理、统计财经、金融等众多领域。(另外,Excel还是伦敦一所会展中心的名称)。.NET可以创建Excel Add-In对Excel进行功能扩展,这些扩展的功能包括自定义用户函数,自定义UI,与数据库进行数据交互等。

一 主要的Excel开发方式

  1 VBA

    VBA是一种Visual Basic的宏语言,它是最早的Office提供定制化的一种解决方案,VBA是VB的一个子集,和Visual Basic不同,VBA是一种宿主型语言,无论是专业的开发人员,还是刚入门的非开发人员,都可以利用VBA完成简单或复杂的需求。

  2 Excel Addin

    Excel Addin,就像Visual Studio外接插件一样,也可以使用一些技术为Office开发一些插件。对VBA的一些问题,一些专业的开发人员,可以使用 VisualBasic或者VisualC++等工具来引用Office的一些dll,来针对Office进行开发。开发的时候将dll注册为com组 件,并在注册表里面进行注册,这样就可以在Excel里直接调用这些插件。

  3 VSTO (Visual Studio Tools for Office)

    VSTO主要是对Office的一些dll进行了.NET封装,使得我们可以使用.NET上的语言来方便的对Office的一些方法进行调用。所 以,Office开发跨入了一个新的时代,开发人员可以使用更加高级的语言和熟悉的技术来更容易的进行Office开发。 对于企业及的应用和开发,VSTO或许是首要选择,他极大地扩展了Office应用程序的能力,使用.NET平台支持的编程语言,能够直接访问.NET上面众多的类库。具有较好的安全机制。简化了Office插件的开发和部署。

  4 XLL

    XLL是Excel的一种外接应用程序,他使用C和C++开发,程序通过调用Excel暴漏的C接口来实现扩展功能。这种方式开发的应用程序效率高,但是难度大,对开发者自身的要求较高。开源项目Excel-DNA就是使用XLL技术开发的,能够帮助.NET 开发人员来极大地简化RTD函数,同步、异步UDF函数的编写和开发。

  5 OpenXML

    如果用户没有安装Excel应用程序,或者在服务器端需要动态生成Excel文件的时候。我们可能需要直接读取或者生成Excel文件,这种情况下,如果要对Excel文件进行各种定制化开发的话,建议使用OpenXML。NPOI开源项目可以直接读写Excel文件,而且兼容多个版本。

二 使用Excel Add-In构建扩展

  开发环境: 操作系统为Windows Server 2008R2 x64;Excel为Excel 2010 x64;开发工具为Visual Studio 2012旗舰版x64;数据库为SQL Server 2008R2 x64.

  1 程序结构

  用Visual Studio 2012新建一个ExcelAddInDemo的Excel Add-In项目,并添加若干文件,程序结构如下图:

  其中,RibbonAddIn可以定制2010的UI面板,SqlHelper.cs是一个简单的数据库访问帮助类,UClog.cs,UCPaneLeft.cs,UCTaskGrid.cs,UCTaskPane.cs都为添加的自定义控件,并通过程序添加到EXCEL界面中.运行起来的界面如下:

  程序可以通过在Excel界面中输入ID,First,Last,Email的值(对应标签的后一个单元格),单击用户列表面板上的保存按钮,将数据保存到数据库中.

  2 RibbonAddIn设计

  我们通过RibbonAddIn.cs给Excel的Ribbon添加了一个名为CUMT的插件.RibbonAddIn面板可以通过工具条控件方便的拖放到设计界面上.RibbonAddIn.cs的属性设置如下图所示:

  后台代码如下:

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using Microsoft.Office.Tools.Ribbon;
 namespace ExcelAddInDemo
 {
   public partial class RibbonAddIn
   {
     private void RibbonAddIn_Load(object sender, RibbonUIEventArgs e)
     {
     }
     private void btnAbout_Click(object sender, RibbonControlEventArgs e)
     {
       System.Windows.Forms.MessageBox.Show("JackWangCUMT!");
     }
     private void btnShow_Click(object sender, RibbonControlEventArgs e)
     {
       if (Globals.ThisAddIn._MyCustomTaskPane != null)
       {
         Globals.ThisAddIn._MyCustomTaskPane.Visible = true;
       }
     }
     private void btnHide_Click(object sender, RibbonControlEventArgs e)
     {
       if (Globals.Thiyam++yghi."B[OH^X[Y\[Y[HZZ[Z[[^][KNKN


NL
YML
LBd#c yi."B]\HHBH\H\\B\[N\[KX[\XB\[K\[[[\[K]B\[K]N\[K[N\[K^\[K\B\X^Y[[[\^HZXX[\^XX\X[\P\Y\BXXP\Y

CB[]X[^P\[

NCB]]HP\Y
X\][\JCB]CB[K]K]UXHH[\]UXJX
P[
N\˙]QYY]]T\HCB]]H9/f\]XX\][\JCB.9o K:#dY]B^Y]H
^Y]
Q[\[\X[X]UX]TY][[YHH[YN[QH

[H\^[K[YJK[N[\H

[H\^[K[YJK[N[\H

[H\^[K[YJK[N[[XZ[H

[H\^[K[YJK[N[H[X]
[[P
TTPRSH[Y\IIIIQ\\[XZ[
N[[\^XS]Y\J[\X[[[[[[K]K[X[\K^[
NY
OH
CB[K\Y\YYNCB[B[K\Y\Y\NCBCB]]H9d\]XX\][\JCBY\B[K]K]UXHH[\]UXJX
P[
N\˙]QYY]]T\HCBCBOOB]BHYR[o.d#OB`&/ng)9d#zhmK:+U9$9. 9.*d#yclg :+k JOB[OH^X[Y\[Y[HZZ[Z[[^][KNKLMNMYLLLYYYLLB[[OH."H9 9b99%9[B...)9ley9."9b9B[OH^X[Y\[Y[HZZ[Z[[^][KNKYYX


B[[OHf^X[Bg*9b9o.i)9#ybyfj9am.+y. 9.*.l,y+9.+z/c9gh++yd9l9kg9d#l,yl9k y.ayc%b,9l9kn`$y+ #z &/[yo#9. 9.*^Xbh9l!gh++yn%/f9b,9l9knnm. 9.*-
9e+9/a-eJ9k.-
yd#l!gh++ydb9b,^9.+K9d#-g9k9$9d#:`&/#c"!l9knf9b,9l9kn
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP