格式化生成的Word文档中的单元格

时间:2012-11-22 09:57:47

标签: c# .net ms-word ms-office visual-studio-lightswitch

我正在LightSwitch结算应用程序中生成发票,生成发票后,Word文档中的SubTotal,SalesTax和Total Due单元格格式不正确。

我已经浏览了每个菜单选项,并探索了其他可能的方法,以便在将其放入文档的Content控件之前对其进行格式化,但我无法获得正确的格式。< / p>

这些数字显示为4100.0000,但它们应该像4,100.00或至少像4100.00

如何做到这一点?

我意识到这是偏离主题的,但我想我会在这里发帖,因为我相信解决方案涉及编写代码,而不是使用Word来完成此操作,因为我已经完成了所有选项,似乎没有一个选项来改变单个单元格的格式。

enter image description here

根据要求,生成文档的代码:

using System;
using System.Linq;
using System.IO;
using System.IO.IsolatedStorage;
using System.Collections.Generic;
using Microsoft.LightSwitch;
using Microsoft.LightSwitch.Framework.Client;
using Microsoft.LightSwitch.Presentation;
using Microsoft.LightSwitch.Presentation.Extensions;
using OfficeIntegration;
namespace LightSwitchApplication
{
    public partial class Billing
    {
        partial void GenerateInvoice_Execute()
        {
            var mappings = new List<ColumnMapping>();

            mappings.Add(new ColumnMapping("InvoiceId", "InvoiceId"));
            mappings.Add(new ColumnMapping("DateGenerated", "DateGenerated"));

            mappings.Add(new ColumnMapping("InvoiceDataGridSubTotal", "SubTotal"));
            mappings.Add(new ColumnMapping("InvoiceDataGridSalesTax", "Tax"));
            mappings.Add(new ColumnMapping("InvoiceDataGridDateDue", "DateDue"));
            mappings.Add(new ColumnMapping("InvoiceDataGridTotalDue", "Total"));

            object doc;
            string path = @"C:\Users\Jason\Documents\SV Invoice.docx";

            doc = OfficeIntegration.Word.GenerateDocument(path, this.BillingTables.SelectedItem, mappings);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

在这种情况下,不需要代码和Word格式。为了在动态生成的Word文档中正确格式化数字,必须在Visual Studio LightSwitch中的数据设计器中设置要使用的格式:

  • 打开LightSwitch项目
  • 展开项目节点&gt;打开包含您要格式化的号码的Table
  • 选择需要格式化的Field
  • Properties窗格中,向下滚动,直至看到格式设置(Format Pattern
  • 现在,您可以在此处格式化数字。有关可用选项,请参阅this链接。我选择使用C2进行格式化。

按照上述步骤,我能够生成具有以下格式的Word文档:

4500.00代替4500.0000

答案 1 :(得分:1)

您应该能够为ColumnMapping构造函数提供第三个参数:格式化值的委托:

Func<decimal, string> formatDelegate = x => x.ToString("c2");
mappings.Add(new ColumnMapping("InvoiceDataGridSubTotal", "SubTotal",
                               FormatDelegate: formatDelegate));