zoukankan      html  css  js  c++  java
  • 在Excel中创建和使用ServerDocument

    ServerDocument是微软提供的一种读取WordExcel文档级应用中CachedData的工具。本示例将向你展示如何使用用ServerDocument

    1.      创建文档级应用

    打开Visual Studio,

    新建一个Excel Workbook应用

    2.     创建数据模型

    在类库中,建产一个名为“ContractTable”的数据表。

    我们在类库中写一个“DataSource”的类来封装对数据表的操作。

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace DataModle
    {
        /// <summary>
        /// DataSource类
        /// </summary>
        public class DataSource
        {
            private DataSet1 source = null;
    
            public DataSet1 Source
            {
                set
                {
                    source = value;
                }
                get
                {
                    return source;
                }
            }
    
            /// <summary>
            /// 构造函数
            /// </summary>
            public DataSource()
                : base()
            {
                source = new DataSet1();
            }
    
            /// <summary>
            /// AddData方法,用来向数据集添加数据
            /// </summary>
            /// <param name="paramCollection">数据</param>
            public void AddData(params object[] paramCollection)
            {
                try
                {
                    source.Tables["ContractTable"].Rows.Add(paramCollection[0],
                        paramCollection[1], paramCollection[2]);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }


     

    3.      在文档级应用中使用数据模型

    ExcelWorkbook工程中,我们先引入上面的那个类库

    然后在Sheet1安放一个List空件用来显示数据。

    Sheet1.cs中通过以下代码来实现Cached Data。在ServerDocument中我们的主要目的就是操作这些Cached Data

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml.Linq;
    using Microsoft.Office.Tools.Excel;
    using Microsoft.VisualStudio.Tools.Applications.Runtime;
    using Excel = Microsoft.Office.Interop.Excel;
    using Office = Microsoft.Office.Core;
    using DataModle;
    
    namespace ExcelWorkbook1
    {
        public partial class Sheet1
        {
            public DataSet mySource = null;
    
            private void Sheet1_Startup(object sender, System.EventArgs e)
            {
                // 判断是否存在Cached Data“mySource”
                if (!IsCached("mySource"))
                {
                    var source = new DataSource();
                    mySource = source.Source;
                    // 建立Cached Data并绑定到list1
                    StartCaching("mySource");
                    source.AddData(1, "郭靖", "桃花岛");
                    source.AddData(2, "黄蓉", "桃花岛");
                    source.AddData(3, "郭芙", "桃花岛");
                    list1.SetDataBinding(mySource.Tables["ContractTable"]);
                }
                else
                {
                    if (mySource != null)
                    {
                        list1.SetDataBinding(mySource.Tables["ContractTable"]);
                    }
                }
            }
    
            private void Sheet1_Shutdown(object sender, System.EventArgs e)
            {
            }
    
            #region VSTO 设计器生成的代码
    
            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InternalStartup()
            {
                this.Startup += new System.EventHandler(Sheet1_Startup);
                this.Shutdown += new System.EventHandler(Sheet1_Shutdown);
            }
    
            #endregion
    
        }
    }


     

    4.      创建ServerDocument应用程序

    建建一个控制台程序来实现使用ServerDocument操作ExcelWorkbook1

    在开始写代码前我们先要引入“Microsoft.VisualtStudio.Applications.ServerDocument”组件。ServerDocument类就在这个组件中。

    由于在程序中我们会用到一些Winform的组件。所以,我们还需要引用一下“System.Windows.Forms”组件。

    在程序中我们写入以下代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    using System.Windows.Forms;
    using Microsoft.VisualStudio.Tools.Applications;
    using System.Data;
    using System.IO;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            [STAThread]
            static void Main(string[] args)
            {
                OpenFileDialog OFD = new OpenFileDialog();
                OFD.Filter = "Excel Document| *.xls;*.xlsx";
                OFD.Multiselect = false;
                OFD.ShowDialog();
                try
                {
                    // 打开ServerDocument
                    ServerDocument SD = new ServerDocument(OFD.FileName);
                    // 获取CachedDataHostItem
                    CachedDataHostItem CDHI = SD.CachedData
                        .HostItems["ExcelWorkbook1.Sheet1"];
                    // 获取CachedDataItem
                    CachedDataItem CDI = CDHI.CachedData["mySource"];
    
                    // 以下为数据处理过程
                    DataSet ds = new DataSet("DataSet1");
                    MemoryStream ms = new MemoryStream();
                    StreamWriter sw = new StreamWriter(ms);
                    sw.Write(CDI.Schema);
                    sw.Flush();
                    ms.Position = 0;
                    ds.ReadXmlSchema(ms);
                    MemoryStream mss = new MemoryStream();
                    sw.Close();
                    sw = new StreamWriter(mss);
                    sw.Write(CDI.Xml);
                    sw.Flush();
                    mss.Position = 0;
                    ds.ReadXml(mss);
                    ds.Tables["ContractTable"].Rows.Add(4, "郭襄", "襄阳");
                    CDI.SerializeDataInstance(ds);
                    SD.Save();
                    SD.Close();
                    sw.Close();
                    ms.Close();
    
                    ConsoleColor original = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("Complete!");
                    Console.ForegroundColor = original;
                }
                catch (Exception ex)
                {
                    ConsoleColor original = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(ex.Message);
                    Console.ForegroundColor = original;
                }
                Console.ReadKey();
            }
        }
    }


    将编译好的ExcelWorkbook1(在bin目录下的那个Excel文档),运行结果如下:

    然后关闭Excel会弹出对话框,要求保存文档。选择保存(这很重要,如果不保存就不会有Cached Data保存在Excel文档中)。

    运行控制台程序,选中刚才的那个Excel文档。

    运行结果如图:

    然后我们打开那个Excel文档,我们就可以发现有条新记录已经通过控制台程写入的文档中.

  • 相关阅读:
    QButton
    注入
    SpringBoot热重启配置
    centos7 安装 tomcat
    centos 安装jdk
    spring boot (6) AOP的使用
    spring boot (5) 自定义配置
    spring boot (4) 使用log4 打印日志
    SpringBoot (3)设置支持跨域请求
    spring boot (2) 配置swagger2核心配置 docket
  • 原文地址:https://www.cnblogs.com/pangblog/p/3253794.html
Copyright © 2011-2022 走看看