silverlight
发布时间:2022-05-03 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight实例教程 - Out of Browser与Office的互操作,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
概述
在本篇开始前,首先感谢每一位留下反馈评论的朋友,在我看来,博客不仅仅是简单的分享,
同时也是一个学习和发现的过程。在阅读完一篇文章能对其有所评论和提问,也是一种思
考的表现。 在上篇“ Silverlight实例教程 - Out of Browser与COM的交互基础”中,我们讨论了Silverlight的OOB应用访问COM组件基础知识,在大家的反馈中,有不少朋友提出疑问,Silverlight对于
Silverlight Out of Browser从Silverlight 3 到现在Silverlight 4,一直遵循跨平台的原则,在微软官方
有相关的解释,
Linux,Moonlight从第
一个版本发布,就已经有了高级权限模型,在GtkWidget中Moonlight具有full-trust的能力。 也就是说,Silverlight具有信任权限提升,而Mono具有full-trust模式。
Mac, 由于Mac没有Com的概念,所以,Silverlight的COM无法在Mac中运行,但是微软官方也正在寻找一种方式,尝试使用一种模拟的方式来实现在Mac上运行COM的
效果,例如,运行AppleScript
在上面的脚本中
可以看出,Mac如何通过AppleScript来
调用Office Word的,而这样的方式其实也就是Mac对COM的
调用,在以后Silverlight的版本中,如果加入对AppleScripts的
支持即可在Mac上
支持COM的运行;
从上面的描述来看,Silverlight的OOB应用跨平台,并非不能
解决,只是时
间的问题。作为技术人员,经常对一门技术的前景进行展望,而
需要注意的是,尽量不要使用其短处与其他技术的长处进行相比较,这样的对比结果,只会干扰自己的视线和思路。一门能挣钱的技术,就已经算是一门好技术了。
Out of Browser与Office的互操作
言归正传,本篇将继续介绍Silverlight的Out of Browser应用与Office COM组件的交互。相信大家对微软的Office系列并不陌生了,Office在企业
项目中使用频率较高,例如在日常
项目中经常与遇到导出列表到Excel,或者
发送邮件等
功能需求,所以微软将其许多
功能封装成COM组件,供开发人员使用,增强其应用的灵活性。本篇,我将演示
在Silverlight的OOB应用中,如何使用Office Outlook,Word,Excel组件。
我们仍旧使用上篇的项目
代码,对其进行扩展,大家可以到上篇下载演示项目
代码。
在开始
功能代码前,首先需要在UI界面ToolBar中
添加三个Button来响应其事件。
1
<
Border
BorderBrush
="
{Staticresource GlossyBlack_strokeGradient}
"
BorderThickness
="1"
CornerRadius
="2"
Margin
Padding
="0,1,1"
>
2
StackPanel
3
StackPanel
Orientation
="Horizontal"
4
Button
IsTabStop
="false"
Width
="56"
Height
="80"
Style
{Staticresource BlackGlossyButton}
="1,0"
Foreground
="White"
x:Name
="sendemailBtn"
Click
="sendemailBtn_Click"
5
6
Image
VerticalAlignment
="Top"
HorizontalAlignment
="Center"
source
="/SilverlightOOBDemo;component/Images/SendEmail.png"
Stretch
="None"
/>
7
TextBlock
="Bottom"
text
="发邮件"
textwrapping
="Wrap"
8
</
9
Button
10
11
="excelBtn"
="excelBtn_Click"
12
13
="/SilverlightOOBDemo;component/Images/Excel.png"
14
="Excel"
15
16
17
18
="wordBtn"
="wordBtn_Click"
19
20
="/SilverlightOOBDemo;component/Images/Word.png"
21
="Word"
22
23
24
25
Foreground
="#8FFFFFFF"
="Office操作"
VerticalAlignment
26
27
Border
>
对与三个应用分别
添加其Click事件
代码。首先,我们先看看
OutLook的COM调用,
1
private
void
sendemailBtn_Click(
object
sender, routedEventArgs E)
2
{
3
using
(dynamic outlook
=
AutomationFactory.CreateObject(
"
Outlook.Application
"
))
4
{
5
dynamic mail
outlook.CreateItem(
0
);
6
mail.To
qq34506@hotmail.com
;
7
mail.Subject
来自jv9的问候
8
mail.HTMLBody
这封邮件是通过Silverlight发送的.
9
mail.Send();
10
//
@H_108_88
@mai
l.Display(
); 这里是
显示出
发送邮件的Outlook窗口
11
@R_673_8787@
12
}
在建立Outlook实例后,我们可以使用Outlook.CreateItem来创建新的
邮件实例,其中可以简单的设置发送目的邮箱,
标题,
内容等。在
代码后面有mai
l.Send和Display两个
方法。其中如果
调用Display,Silverlight会激活Outlook创建
邮件窗口,然后
用户确认后
发送邮件到目的邮箱。例如:
而@L_15_11
@mai
l.Send则会直接
发送邮件到目的邮箱。而通常来说,我们建议使用mai
l.Display,让
用户确认后再发送。
Silverlight操作Office Word
Silverlight操作Office Word比较简单,首先我们
添加Word的相应事件:
wordBtn_Click(
dynamic word
Word.Application
word.Visible
true
dynamic doc
word.Documents.Add();
String
Insertxt
这是Silverlight操作Office Word测试。欢迎大家访问我的博客 http://jv9.cnblogs.com
dynamic range
doc.Range(
,
range.Text
Insertxt;
}
在创建Word实例后,使用Document
s.Add创建
一个新的空文档,然后,
添加相关文档或者
图片到Word中。其运行
效果如下:
Silverlight操作Office Excel
相对上面两个Office组件来讲,Excel的使用较为复杂一点,这里我们来详细演示Silverlight导出Excel的实例。
操作Excel不可缺少的是
数据库,作为演示实例,我使用Blend 4创建简单的数据集合,使用Blend创建例程数据集合,我曾经在
Blend实例系列中讲过,这里我将简单的演示,
首先使用Blend 4打开当前SilverlightOOBDemo项目,然后在右边
属性栏,选择Data,
现在,需要在UI中创建
一个Datagrid的控件,然后拖动右边Data下SampleData
source1下的Collection到Datagrid,进行数据绑定,这里我仍旧使用了Blend 4,所有控件和数据绑定,都是简单的拖动即可实现。
1
sdk:DataGrid
x:Name
="dgDemo"
="10"
AutoGeneratecolumns
Itemssource
{Binding Collection}
DataContext
{Binding source={Staticresource SampleDatasource1}}
2
sdk:DataGrid.columns
3
sdk:DataGridTextcolumn
Binding
{Binding Property1}
Header
="Property1"
4
{Binding Property2}
="Property2"
5
{Binding Property3}
="Property3"
6
7
8
sdk:DataGrid
@H_356_
607@
以上设置,我们
添加了Sample数据源,并且绑定数据到指定datagrid中,现在,可以设计Excel组件
调用代码,
bool
firstTime
=
true
;
public
ObservableCollection
<
Item
>
itemCollection
new
();
private
void
excelBtn_Click(
object
:rgb(0, routedEventArgs E)
{
dynamic excel
AutomationFactory.CreateObject(
"
Excel.Application
"
);
excel.Visible
;
dynamic workbook
excel.workbooks;
workbook.Add();
dynamic sheet
excel.ActiveSheet;
dynamic cell
null
int
i
1
//
将数据传输到Excel
foreach
(Item item
in
dgDemo.ItemssourcE)
{
itemCollection.Add(item);
cell
sheet.Cells[i,
];
列和行
cell.Value
item.Property1;
cell.columnWidth
25
2
];
item.Property3;
i
++
@R_673_8787@
}
在上面
代码中,声明
一个Excel实例,然后通过循环输入数据源到Excel实例Sheet中,从
代码中我们
可以看出,
输出Excel是通过Cell进行操作的。
这里,我仅
输出了Property1和Property3两列。这样就简单的实现了
输出Datagrid的数据到Excel了。
现在我们对当前的
输出Excel进行一些强化,输入
一个图表
功能。
创建
一个例程图表
dynamic sheetShapes
sheet.Shapes;
sheetShapes.AddChart(
-
4100
200
400
300
28
29
@H_356_
607@
sheepShape
s.AddChart创建
一个新的图表
效果,其数据是绑定的dynamic sheet = exce
l.ActiveSheet
这样当我们再次运行
输出Excel时,即可得到如下结果:
下面我们更进一步的完善Excel输入
功能,
添加自动绑定更新事件。其目的是为了实现,当
用户输出Excel后,
修改Excel中数据,Silverlight的OOB应用中Datagrid
同时也更新
修改对应数据。
实现该需求,
需要用到Excel的SheetChange事件。当
用户修改Excel中
内容时,即激活该事件。首先,我们需要
修改以上
代码,
更新事件
30
if
(firstTimE)
31
32
excel.SheetChange
+=
SheetChangedDelegate(SheetChangedEventHandler);
33
String
sheetName
sheet.Name;
34
35
firstTime
false
36
37
38
@H_356_
607@
为了完成SheetChange,我们需要
添加相关事件委托。
delegate
SheetChangedDelegate(dynamic excelSheet, dynamic rangeArgs);
其具体事件响应Handler为:
SheetChangedEventHandler(dynamic excelSheet, dynamic rangeArgs)
{
excelSheet;
dynamic range
rangeArgs;
dynamic rowValue
range.Row;
ObservableCollection
entities
itemCollection;
Item[] newEntities
Item[
10
dynamic col2range
sheet.Range(
B1:B10
for
(
0
; i
; i
)
Item newEntity
Item();
newEntity.Property1
entities[i].Property1;
newEntity.Property2
entities[i].Property2;
dynamic item
col2range.Item(i
+
newEntity.Property3
Convert.ToInt32(item.value);
newEntities[i]
newEntity;
dgDemo.Itemssource
newEntities;
dgDemo.SELEctedIndex
Convert.ToInt32(rowvalue)
-
}
大佬总结
以上是大佬教程为你收集整理的Silverlight实例教程 - Out of Browser与Office的互操作全部内容,希望文章能够帮你解决Silverlight实例教程 - Out of Browser与Office的互操作所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。