ServerDocument是微软提供的一种读取Word或Excel文档级应用中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文档,我们就可以发现有条新记录已经通过控制台程写入的文档中.