针对LightSwitch的和改进的新Office集成包扩展

[原文发表地址] New and Improved Office Integration Pack Extension for LightSwitch

[原文发表时间] 2012-07-18 8:25

我几年前就是Office 开发的大粉丝了,并一直在Grid Logic站点上关注免费的针对LightSwitch 的Office 集成包扩展,自从一年前发布它之后。事实上,我在最新的我的Contoso 构建VS 2012 版本的示例应用程序中使用它。在 5 月,他们将它移到了CodePlex 上的源代码中,几个星期之前,他们发布了一个新版本 1.03。昨天我终于有一些时间来玩弄它,哇!有很多很酷的新功能。

星期一我在计算机旁观看Office 2013预览公告和主题演讲,Office和 SharePoint 开发的前景给我留下了深刻的印象 !但意识到许多开发人员正在使用 Office 2010 (及更早版本)构建业务应用程序,我决定看看新的Office 集成包,它能够使您以多种方式自动化 Excel、 Word 和 Outlook 来导入和导出数据,创建文档和 PDF,以及适用于电子邮件和约会。此扩展可与Office 2010 以及Visual Studio 2010 和Visual Studio 2012中的 LightSwitch 桌面应用程序一起使用。

在这里获取它: https://officeintegration.codeplex.com/

首先,因为他们将它移到了 CodePlex中,一切都更组织化了,包括文档示例应用程序(含 VB 和 C#)。它很容易查明当前版本,并从这里下载 VSIX 扩展。运行示例应用程序是快速学习、 方便使用它的方法,他们甚至改进了示例。目前有一系列单独的屏幕,它们演示了每一项功能,从简单地导入和导出数据,到更复杂的报告方案。

其中有一堆功能,所以我鼓励您下载示例并使用。下面是一些我想说是我最喜欢的功能:

1. 从Excel 中导入数据到LightSwitch 屏幕中

类似于我们的Excel 导入示例扩展,Office 集成包将允许您直接从 Excel 导入数据到 LightSwitch 屏幕中。它可以让用户选择一个工作簿和在Sheet1 上查找数据。如果 Excel 列名称 (第一行) 与 LightSwitch 实体属性名称不同,则会弹出一个窗口,让用户映射字段。

image

Office 集成包可以做更多事情。您可以自动化一切。您可以映射特定字段来导入到实体属性中,您可以在代码中指定特定的工作簿和工作范围。

    1: Dim map As New List(Of ColumnMapping)
    2: map.Add(New ColumnMapping("Name", "LastName"))
    3: map.Add(New ColumnMapping("Name2", "FirstName"))
    4:  
    5: Excel.Import(Me.Customers, "C:\Users\Bethma\Documents\Book1.xlsx", "Sheet2", "A1:A5", map)

2. 将任何数据集合导出到 Excel 工作表中

当我说"任何数据集合"时,它是指任何对象的任何IEnumerable集合。这意味着您可以使用来自屏幕查询、 模型化的服务器端查询,或类似 LINQ 语句产生的内存集中的数据集。这使得导出数据变得超级灵活和简单。您也有很多的选项来指定您要导出的工作簿、 工作表、 范围和列。

若要导出一个屏幕集合:

 Excel.Export(Me.Books)

若要导出一个模型化的查询 (不是在屏幕上):

 Excel.Export(Me.DataWorkspace.ApplicationData.LightSwitchBooks)

若要从内存LINQ 查询中导出一个集合:

 Dim results = From b In Me.Books
              Where b.Title.ToLower.Contains("lightswitch")
              Select Author = b.Author.DisplayName, b.Title, b.Price
              Order By Author

Excel.Export(results)

 

这简直超级流畅 !当然,您可以指定您要导出的具体字段,但如果你不这样做的话,它会在该集合中反射对象和输出它找到的所有属性。在上述 LINQ 查询案例中,这会导致输出 Excel 列的" Author "" Title "和" Price "。同时请注意如何获取导航路径来了解父姓属性。

image

3. 为你想要导出的数据设置格式

您不仅可以导出来自集合的原始数据,通过指定格式委托,您还可以为正在导出的数据设置格式。例如,将title设置为大写格式和将price设置为钱币格式,你可以创建几个lambda 表达式(一个函数的特别名称), 并在ColumnMapping类中指定上述所说的。

 Dim formatPrice = Function(x As Decimal) As String
                       Return Format(x, "c2")
                   End Function
  
 Dim formatTitle = Function(x As String) As String
                       Return x.ToUpper()
                   End Function
  
  
 Dim map As New List(Of ColumnMapping)
 map.Add(New ColumnMapping("Author", "Author"))
 map.Add(New ColumnMapping("Title", "Title", FormatDelegate:=formatTitle))
 map.Add(New ColumnMapping("Price", "Price", FormatDelegate:=formatPrice))
  
 Excel.Export(Me.Books, "C:\Users\Bethma\Documents\Book1.xlsx", "Sheet2", "C5", map)

4. 导出分层数据(包括图像)到 Word 中来提供基于模板的报告

有了这些增强功能,现在我们可以更容易地通过我们的数据集合来导航关系的层次结构,以便使用 Word 创建基于模板的复杂报表。除了添加格式的支持之外,您还可以导出静态值。数据最终在内容控件书签的表中,您可以在您希望其出现的特定位置的文档中定义它。他们也添加了将图像数据导出到图像内容控件中的功能。这使您可以直接使用来自 LightSwitch的"数据合并"来创建复杂的报表。这里是示例应用程序的代码段,它演示了如何从分层数据中创建一份书面报告:

 'Book fields = Content Controls (See BookReport.docx)
 Dim mapContent As New List(Of ColumnMapping)
 mapContent.Add(New ColumnMapping("Author", "Author"))
 mapContent.Add(New ColumnMapping("Title", "Title", FormatDelegate:=formatTitle))
 mapContent.Add(New ColumnMapping("Description", "Description"))
 mapContent.Add(New ColumnMapping("Price", "Price", FormatDelegate:=formatPrice))
 mapContent.Add(New ColumnMapping("Category", "Category", FormatDelegate:=formatCategory))
 mapContent.Add(New ColumnMapping("PublicationDate", "PublicationDate", FormatDelegate:=formatDate))
 mapContent.Add(New ColumnMapping("FrontCoverThumbnail", "FrontCoverThumbnail"))
 'Author (parent) fields
 mapContent.Add(New ColumnMapping("Email", "Email", StaticValue:=Me.Books.SelectedItem.Author.Email))
  
 Dim goodReviews = From b In Me.Books.SelectedItem.BookReviews
                   Where b.Rating > 3
  
 'Book reviews (child collection) = Bookmarked Tables
 Dim mapTable As New List(Of ColumnMapping)
 mapTable.Add(New ColumnMapping("Rating", "Rating"))
 mapTable.Add(New ColumnMapping("Comment", "Comment", FormatDelegate:=formatTitle))
  
 Dim doc As Object = Word.GenerateDocument("BookReport.docx", Me.Books.SelectedItem, mapContent)
 Word.Export(doc, "ReviewTable", 2, False, Me.Books.SelectedItem.BookReviews, mapTable)
 Word.Export(doc, "GoodReviewTable", 1, True, goodReviews, mapTable)
  
 'Save as PDF and open it
 Word.SaveAsPDF(doc, "BookReport.pdf", True)

这里是生成的 PDF:

image

正如您所看到的,在此版本中Office 集成包有很多出色的功能。它是 VS 库中下载最多的扩展之一,所以其他人绝对同意这是一个非常有用的扩展 — — 而且完全免费。

谢谢Grid Logic对 LightSwitch 社区的支持!如果你们当中的任何人有问题或反馈,请在 CodePlex 项目网站上开始一个讨论。如果您想要帮助构建下一个版本,请加入开发团队!

希望大家喜欢 !