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

C# 在生成的Word文档中格式化单元格,c#,.net,ms-word,ms-office,visual-studio-lightswitch,C#,.net,Ms Word,Ms Office,Visual Studio Lightswitch,我正在LightSwitch billing应用程序中生成发票,生成发票后,Word文档中的小计、销售税和到期总额单元格的格式不正确 我已经检查了每一个菜单选项,并探索了其他可能的方法,以便在将其放入文档的内容控件之前对其进行格式化,但我无法获得正确的格式 数字显示为4100.0000,但它们应该类似于4100.00或至少类似于4100.00 如何做到这一点 我意识到这是一个边缘话题,但我想我还是会在这里发布,因为我相信解决方案涉及到编写代码,而不是使用Word来完成这一点,因为我已经完成了所有

我正在LightSwitch billing应用程序中生成发票,生成发票后,Word文档中的小计、销售税和到期总额单元格的格式不正确

我已经检查了每一个菜单选项,并探索了其他可能的方法,以便在将其放入文档的内容控件之前对其进行格式化,但我无法获得正确的格式

数字显示为
4100.0000
,但它们应该类似于
4100.00
或至少类似于
4100.00

如何做到这一点

我意识到这是一个边缘话题,但我想我还是会在这里发布,因为我相信解决方案涉及到编写代码,而不是使用Word来完成这一点,因为我已经完成了所有的选项,而其中似乎没有一个选项可以更改单个单元格的格式

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

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);
        }
    }
}
使用系统;
使用System.Linq;
使用System.IO;
使用System.IO.IsolatedStorage;
使用System.Collections.Generic;
使用Microsoft.LightSwitch;
使用Microsoft.LightSwitch.Framework.Client;
使用Microsoft.LightSwitch.Presentation;
使用Microsoft.LightSwitch.Presentation.Extensions;
利用OfficeIntegration;
名称空间LightSwitch应用程序
{
公共部分类计费
{
部分无效生成Invoice_Execute()
{
var mappings=newlist();
Add(新的列映射(“InvoiceId”、“InvoiceId”);
添加(新的列映射(“DateGenerated”、“DateGenerated”);
添加(新的列映射(“InvoiceDataGridSubTotal”、“SubTotal”);
添加(新的列映射(“InvoiceDataGridSalesTax”、“Tax”);
添加(新的列映射(“InvoiceDataGridDateDue”、“DateDue”);
添加(新的列映射(“InvoiceDataGridTotalDue”、“Total”);
对象文档;
字符串路径=@“C:\Users\Jason\Documents\SV Invoice.docx”;
doc=OfficeIntegration.Word.GenerateDocument(路径,this.BillingTables.SelectedItem,映射);
}
}
}

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

Func<decimal, string> formatDelegate = x => x.ToString("c2");
mappings.Add(new ColumnMapping("InvoiceDataGridSubTotal", "SubTotal",
                               FormatDelegate: formatDelegate));
Func formatDelegate=x=>x.ToString(“c2”);
添加(新列映射(“InvoiceDataGridSubTotal”、“SubTotal”,
FormatDelegate:FormatDelegate);

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

  • 打开LightSwitch项目
  • 展开项目节点>打开包含要格式化的数字的
  • 选择需要格式化的
    字段
  • 属性
    窗格中,向下滚动直到看到格式化(
    格式化模式
  • 现在,您可以在这里设置数字格式。有关可用选项,请参阅链接。我选择使用
    C2
    格式化
按照上述步骤,我能够生成一个Word文档,格式如下:


4500.00
而不是
4500.0000

请说明如何将数字写入这些单元格。应用程序自动填充word文档中的单元格。但是,当我在lightswitch应用程序中输入数字时,我总是将其作为
4100.00
输入。如果我没有,Lightswitch应用程序会自动设置它们的格式,所以我想它们应该以正确的格式出现在Word文档中。你说的“自动填充”是什么意思?请显示代码。@DanielHilgarth:添加了完整代码。
无法将lambda表达式转换为类型“object”,因为它不是委托类型。
,Intellisense说。
名称“Format”在当前上下文中不存在。
re:更新。@iateYourStudio:新版本如何?抱歉,它不会产生错误,但不再显示数字。它只需将以下文本输出到word文档:System.Func`2[System.Decimal,System.String]@name:感谢提供构造函数的参数。我的最新版本应该比。但您的方法是简单格式化的方法。