1、VSTO学习1 VSTO可以通过项目创建office的智能文档。2 创建excle ,有三中,工作簿,模板,外接程序。我们发现使用模板可以调用form的控件,而工作簿不能。我们需要对单元格进行操作是,需要将namedRange控件引入到sheet中。然后就可以对其读写。使用代码this.namedRange1.Value2 = this.dateTimePicker1.Text ;取得值。3 绑定数据我们可以使用系统的数据源控制面板引入数据表,将数据源面板中的表字段拖入sheet中,既可以实现数据绑定,但是这是,只能显示一条数据,需要实现上下翻页,可以使用BindingSource的翻页功能。
2、代码如下:this.t_UserBindingSource.MoveNext();4 存储过程绑定在数据源中,我们也可以引用存储过程。我们只需要将该存储过程拖入sheet,系统会自动将输出参数生成文本框,返回结果生成表格,然后还会自动生成一个执行按钮。5 创建操作面板我们可以在excl工作簿右面创建一个操作面板来实现一些业务功能。 X(1)在工作簿工程中创建新建项“操作窗格控件”ActionsPaneControl活动面板,然后我们可以在其中拖入一些控件来实现一些功能,例如拖入一个textBox,然后点击按钮后,将textBox1中的值写入到excle中的namedRang。private v
3、oid button1_Click(object sender, EventArgs e) Globals.Sheet1.namedRange1.Value = textBox1.Text; (2)在工作簿中实例化该活动面板,并绑定到工作簿中private void Sheet1_Startup(object sender, System.EventArgs e) ActionsPaneControl1 apc = new ActionsPaneControl1(); Globals.ThisWorkbook.ActionsPane.Controls.Add(apc); 6 给单元格绑定数据通
4、过VSTO可以在excle中改变单元格的名称,然后利用该名称对该单元格赋值。例如:我们将A1单元格改为aaa,然后再界面拖入一个textBox1。将他们绑定在一起this.aaa.DataBindings.Add(Value,textBox1,text);注意:只有改过名字的单元格可以赋值,像A2这样的单元格就不能赋值的。7 用list绑定VSTO默认情况下VSTO只能使用dataset来绑定数据库,但是我们三层架构返回的都是list。怎么办呢?我们可以变通的来解决这个问题。VSTO是可以绑定BindingSource。而BindingSource又可以绑定list。通过这样的转接就实现VST
5、O绑定list了。为了方便可以:1 在数据源面板中添加对象数据源,将model引入2 从数据源中将model拖入excel中。Model是不能自动得到数据的。但是拖入后系统会自动帮我们创建一个BindingSource。而且这个BindingSource还与界面中的每一个字段都绑定好了。3 我们在后台代码中加入base_UserMangeInfoBindingSource.DataSource = MES.BASE.BLL.Base_UserMangeBLL.SelectAll();通过bll将数据查询出来绑定到BindingSource。但是:该方法只能单向绑定,也就是从BindingSou
6、rce绑定到界面控件。无法从界面控件将修改后的数据传给BindingSource。8 数据缓存Vsto可以进行数据缓存,当数据库离线后,在本地也可以打开缓存的数据。但是我认为这个并不好用。我们需要的是如何利用数据缓存写入数据库。上面提到的方法都是从数据库中读出数据,如果要将数据写回数据库,还得自己想办法。最直接的办法就是读取界面的数据控件。然后调用bll写回。9 保存word如果需要保存整个word文档包括他们的格式,可能VSTO就无能为力啦。VSTO只能向数据库中写入数据,不能把格式同步保存。要设置格式只能在word智能文档namedRange控件上编辑这一段落用上面的格式。然后把这些nam
7、edRange段落写入数据显示出来。问题这样编写word就不方便了。很多时候我们保存word并不一定有固定的格式。因此要保存word可能还是得走保存整个word文件的办法。10 命令行打开VSTO文档传入参数很多时候,我们希望在打开VSTO文件的时候,传入参数(例如表ID),我们好在VSTO中根据参数查询绑定数据。VSTO文档没有构造函数。我们可用通过命令行传参数的办法变相实现这个方法。1 首先在使用Environment.GetCommandLineArgs()方法获取命令行中的参数。private void ThisDocument_Startup(object sender, Syste
8、m.EventArgs e) int id=0; string id1=; foreach (String item in Environment.GetCommandLineArgs() if (item.Contains(id:)/如果包含id MessageBox.Show(item); int a1 = item.IndexOf(:) + 1;/起始点 int a2 = item.IndexOf(;) - a1;/长度 /截取字符串中ID的值 id1 =item.Substring(a1, a2); id = System.Convert.ToInt32(id1); /绑定到前台对象
9、bookmark1.Text = id.ToString(); 2 在调用VSTO的窗体,使用Process.Start()方法,通过命令行的方式调用 string WordPath=d:My DocumentsVisual Studio 2008ProjectsWindowsFormsApplication3WordTemplate1binDebugWordTemplate1.dotx; string id = 1234567890; Process.Start(winword,+WordPath+ /id:+id+;);11 excl导出导入数据和图表using System;using
10、System.Collections.Generic;using System.Text;using System.Web.UI.WebControls;using Excel;using System.Reflection;using System.Web;namespace BLL public class ExclOut string strUrl ;/保存路径 GridView dgv; public int DateCount;/导出条数 int DataGridViewColumncount ;/取得网格控件列数 public int DataGridViewRowCount;/取
11、得网格控件行数 public Object, MyData;/用于接收数据的对象 int Count, i, j; public ExclOut(GridView GridView,string url) strUrl = url ; dgv = GridView;/构造方法取得要导出的网格控件 DateCount = dgv.Rows.Count; / / 导出excl和图表 / 参数:type输出类型strRange1,strRange2图表输出范围,str图表内部名称数组,workSheetName基础表标签页名 / / public string exutExcel(int type,
12、 string strRange1, string strRange2, string str, string workSheetName) /HttpContext.Current.Response.Write(1); DataGridViewColumncount = dgv.Columns.Count;/取得网格控件列数 DataGridViewRowCount = dgv.Rows.Count+1;/取得网格控件行数 MyData = new ObjectDataGridViewRowCount + 1, DataGridViewColumncount;/用于接收数据的对象 /Http
13、Context.Current.Response.Write(:2); ApplicationClass MyExcel ;/excel对象 Workbooks MyWorkBooks;/工作簿对象集合 Workbook MyWorkBook;/工作簿 Worksheet MyWorkSheet;/标签页 Chart MyChart;/图表对象 Range MyRange, MyRange1;/范围对象 try MyExcel = new ApplicationClass();/实例化excle对象 /MyExcel.Visible = true;/在界面打开excle窗口 if (MyExc
14、el = null) /MessageBox.Show(Excel程序无法启动!, 信息提示, MessageBoxButtons.OK, MessageBoxIcon.Information); return null; MyWorkBooks = MyExcel.Workbooks; MyWorkBook = MyWorkBooks.Add(Missing.Value); MyWorkSheet = (Worksheet)MyWorkBook.Worksheets1; MyWorkSheet.Name = workSheetName;/设置标签页名称 MyRange = MyWorkShe
15、et.get_Range(A1, F1); /取得标题 Count = 0; for (i = 0; i dgv.Columns.Count; i+) MyData0, i = dgv.HeaderRow.Cellsi.Text; Count = Count + 1; /设标题为黑体字 MyWorkSheet.get_Range(MyWorkSheet.Cells1, 1, MyWorkSheet.Cells1, Count).Font.Name = 黑体; /标题字体加粗 MyWorkSheet.get_Range(MyWorkSheet.Cells1, 1, MyWorkSheet.Cel
16、ls1, Count).Font.Bold = true; /设表格边框样式 MyWorkSheet.get_Range(MyWorkSheet.Cells1, 1, MyWorkSheet.Cells1, Count).Borders.LineStyle = 1; /-升序排列- j = 1; /从网格控件中遍历取得数据 foreach (GridViewRow var in dgv.Rows) int i1 = 0; for (i = 0; i = 0; j-) for (i = 0; i DataGridViewColumncount; i+) string str1 = dgv.Row
17、sj.Cellsi.Text; if (str1 != & dgv.Rowsj.Cellsi.Visible = true) MyDatak, i = str1; k+; /同时导出多个图表(月表) private static void exportChatr(Workbook MyWorkBook, Worksheet MyWorkSheet, int DataGridViewcount, out Chart MyChart, out Range MyRange1) /-DPPM- string str2 = DPPM, MONTH, VALUE, 柱轴标题, 柱轴标签, DPPM ; s
18、tring strR2 = C1:C + DataGridViewcount + ,L1:N + DataGridViewcount; chart2(MyWorkBook, MyWorkSheet, strR2, null, str25, str2); /-OTIF- string str1 = OTIF, MONTH, percent, 柱轴标题, 柱轴标签, OTIF ; string strR1 = C1:C + DataGridViewcount + ,F1:H + DataGridViewcount; chart2(MyWorkBook, MyWorkSheet, strR1, nu
19、ll, str15, str1); /-Problem Resolution- string str3 = Problem Resolution, MONTH, VALUE, 柱轴标题, 柱轴标签, Problem Resolution ; string strR3 = C1:C + DataGridViewcount + ,O1:Q + DataGridViewcount; chartColumLine(MyWorkBook, MyWorkSheet, out MyChart, out MyRange1, strR3, null, str35, str3); /-Audit Performa
20、nce- string str4 = Audit Performance, MONTH, VALUE, 柱轴标题, 柱轴标签, Audit Performance ; string strR4 = C1:C + DataGridViewcount + ,AI1:AI + DataGridViewcount; chartDf(MyWorkBook, MyWorkSheet, out MyChart, out MyRange1, strR4, null, str45, str4); /-Audit Performance- string str5 = Load Capacity, MONTH, t
21、otal, 柱轴标题, 柱轴标签, Load Capacity ; string strR5 = C1:C + DataGridViewcount + ,U1:U + DataGridViewcount; chartDf(MyWorkBook, MyWorkSheet, out MyChart, out MyRange1, strR5, null, str55, str5); /-FAIR Right First Time- string str6 = FAIR Right First Time, MONTH, value, 柱轴标题, 柱轴标签, FAIR Right First Time
22、; string strR6 = C1:C + DataGridViewcount + ,AD1:AE + DataGridViewcount; chartColum2All(MyWorkBook, MyWorkSheet, out MyChart, out MyRange1, strR6, null, str65, str6); /-Production Plan Adherance- string str7 = Production Plan Adherance, MONTH, total, 柱轴标题, 柱轴标签, Production Plan Adherance ; string strR7 = C1:C + DataGridViewcount + ,AA1:AB + DataGridViewcount; chart1(MyWorkBook, MyWorkSheet, out MyChart, out MyRange1, strR7, null, str
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1