カスタム書式設定をフィールドに適用する
場合によっては、ユーザーがフィールドにカスタム書式を適用する必要があることがあります。この記事では、これを行う方法の例をいくつか見ていきます。
オプションの詳細については、フィールドの名前空間 の対応するクラスの各フィールド タイプのプロパティの完全なリストを参照してください。
フィールド結果にカスタム書式設定を適用する方法
Aspose.Words は、フィールドの結果のカスタム書式設定用の API を提供します。 IFieldResultFormatter インターフェースを実装して、フィールド結果のフォーマット方法を制御できます。数値形式スイッチ (# “#.##")、日付/時刻形式スイッチ (@ “dd.MM.yyyy”)、および数値形式スイッチ (* Ordinal) を適用できます。
次のコード例は、フィールド結果にカスタム書式設定を適用する方法を示しています。
// 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(); | |
} |
IF
状態の評価方法
mail merge の後に IF
条件を評価する場合は、式の評価結果をすぐに返す EvaluateCondition メソッドを使用できます。
次のコード例は、このメソッドの使用方法を示しています。
// 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); |
カスタム書式設定を時間フィールドに適用する方法
デフォルトでは、Aspose.Words は TIME
フィールドを現在のカルチャの短時間形式で更新します。 Microsoft Word 形式と .NET/Windows 形式の間には違いがあり、また異なる .NET Framework バージョン間にも違いがあることがわかりました。要件に従って TIME
フィールドをフォーマットしたい場合は、IFieldUpdateCultureProvider インターフェイスを実装することでこれを実現できます。
次のコード例は、カスタム書式設定を 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; | |
} | |
} | |
} |