Zastosuj niestandardowe formatowanie do pól

Czasami użytkownicy muszą zastosować niestandardowe formatowanie do pól. W tym artykule przyjrzymy się kilku przykładom, jak można to zrobić.

Aby dowiedzieć się więcej opcji, zobacz pełną listę właściwości dla każdego typu pola w odpowiedniej klasie w Przestrzeń nazw pól.

Jak zastosować niestandardowe formatowanie do wyniku w polu

Aspose.Words udostępnia API do niestandardowego formatowania wyniku pola. Możesz zaimplementować interfejs IFieldResultFormatter, aby kontrolować sposób formatowania wyniku w polu. Można zastosować przełącznik formatu liczb, tj. # “#.##”, przełącznik formatu daty/godziny, tj. @ “dd.MM.rrrr” oraz przełącznik formatu liczb, tj. * Ordinal.

Poniższy przykład kodu pokazuje, jak zastosować niestandardowe formatowanie wyniku pola:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
doc.FieldOptions.ResultFormatter = new FieldResultFormatter("[{0:N2}]", null);
DocumentBuilder builder = new DocumentBuilder(doc);
Field field = builder.InsertField("=-1234567.89 \\# \"### ### ###.000\"", null);
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.FormatFieldResult.docx");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
class FieldResultFormatter : IFieldResultFormatter
{
public FieldResultFormatter(string numberFormat, string dateFormat)
{
mNumberFormat = numberFormat;
mDateFormat = dateFormat;
}
public FieldResultFormatter()
: this(null, null)
{
}
public override string FormatNumeric(double value, string format)
{
mNumberFormatInvocations.Add(new object[] { value, format });
return string.IsNullOrEmpty(mNumberFormat)
? null
: string.Format(mNumberFormat, value);
}
public override string FormatDateTime(DateTime value, string format, CalendarType calendarType)
{
mDateFormatInvocations.Add(new object[] { value, format, calendarType });
return string.IsNullOrEmpty(mDateFormat)
? null
: string.Format(mDateFormat, value);
}
public override string Format(string value, GeneralFormat format)
{
throw new NotImplementedException();
}
public override string Format(double value, GeneralFormat format)
{
throw new NotImplementedException();
}
private readonly string mNumberFormat;
private readonly string mDateFormat;
private readonly ArrayList mNumberFormatInvocations = new ArrayList();
private readonly ArrayList mDateFormatInvocations = new ArrayList();
}

Jak ocenić stan IF

Jeśli chcesz ocenić warunek IF po mail merge, możesz użyć metody EvaluateCondition, która natychmiast zwraca wynik oceny wyrażenia.

Poniższy przykład kodu pokazuje, jak używać tej metody:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
DocumentBuilder builder = new DocumentBuilder();
FieldIf field = (FieldIf) builder.InsertField("IF 1 = 1", null);
FieldIfComparisonResult actualResult = field.EvaluateCondition();
Console.WriteLine(actualResult);

Jak zastosować niestandardowe formatowanie do pola czasu

Domyślnie Aspose.Words aktualizuje pole TIME przy użyciu bieżącego formatu krótkiego czasu kultury. Odkryliśmy, że istnieje różnica między formatowaniem Microsoft Word a formatowaniem .NET/Windows, a także między różnymi wersjami .NET Framework. Jeśli chcesz sformatować pole TIME zgodnie ze swoimi wymaganiami, możesz to osiągnąć poprzez wdrożenie interfejsu IFieldUpdateCultureProvider.

Poniższy przykład kodu pokazuje, jak zastosować niestandardowe formatowanie do pola TIME:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.InsertField(FieldType.FieldTime, true);
doc.FieldOptions.FieldUpdateCultureSource = FieldUpdateCultureSource.FieldCode;
doc.FieldOptions.FieldUpdateCultureProvider = new FieldUpdateCultureProvider();
doc.Save(ArtifactsDir + "WorkingWithFields.FieldUpdateCulture.pdf");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
class FieldUpdateCultureProvider : IFieldUpdateCultureProvider
{
public CultureInfo GetCulture(string name, Field field)
{
switch (name)
{
case "ru-RU":
CultureInfo culture = new CultureInfo(name, false);
DateTimeFormatInfo format = culture.DateTimeFormat;
format.MonthNames = new[]
{
"месяц 1", "месяц 2", "месяц 3", "месяц 4", "месяц 5", "месяц 6", "месяц 7", "месяц 8",
"месяц 9", "месяц 10", "месяц 11", "месяц 12", ""
};
format.MonthGenitiveNames = format.MonthNames;
format.AbbreviatedMonthNames = new[]
{
"мес 1", "мес 2", "мес 3", "мес 4", "мес 5", "мес 6", "мес 7", "мес 8", "мес 9", "мес 10",
"мес 11", "мес 12", ""
};
format.AbbreviatedMonthGenitiveNames = format.AbbreviatedMonthNames;
format.DayNames = new[]
{
"день недели 7", "день недели 1", "день недели 2", "день недели 3", "день недели 4",
"день недели 5", "день недели 6"
};
format.AbbreviatedDayNames = new[]
{ "день 7", "день 1", "день 2", "день 3", "день 4", "день 5", "день 6" };
format.ShortestDayNames = new[] { "д7", "д1", "д2", "д3", "д4", "д5", "д6" };
format.AMDesignator = "До полудня";
format.PMDesignator = "После полудня";
const string pattern = "yyyy MM (MMMM) dd (dddd) hh:mm:ss tt";
format.LongDatePattern = pattern;
format.LongTimePattern = pattern;
format.ShortDatePattern = pattern;
format.ShortTimePattern = pattern;
return culture;
case "en-US":
return new CultureInfo(name, false);
default:
return null;
}
}
}