C# OpenXML Mail Merge объединить формат
Я использую OpenXML для обработки mailmerge. Я загружаю данные из файла JSON для слияния с моим документом.
У меня это отлично работает, но потом мне нужно взять форматирование, описанное в MERGEFORMAT, так как не похоже, что OpenXML обрабатывает это для меня.
Я кодировал для CAPS, FirstCap, Upper и Lower. Также кодируется (еще не проверено) для форматирования даты и времени (начинается с \@), а также управляется \f и \b. (Не уверен, что делать с \m или \v.
Сейчас я смотрю на выполнение чисел, но, хотя вижу, что число начинается с #, я не совсем уверен, как применить числовые параметры в коде.
Во-первых, правильно ли я это делаю (применяя все это в коде) или мне чего-то не хватает, что я могу использовать в SDK?
Во-вторых, как мне работать с числами?
В-третьих, есть ли какие-либо варианты слияния, которые мне не хватает?
Благодарю.
2 ответа
OpenXML SDK не предоставляет что-то подобное, но, тем не менее, по сути, вам нужно именно то, что вы упомянули. Сначала вам нужно проанализировать ваши данные как Double
или же DateTime
а затем позвоните ToString
на них, передав параметр формата, который указан в MergeField.
Однако на тот случай, если вам это интересно, в OpenXML SDK PowerTools есть модуль DocumentAssembler, который выполняет аналогичные функции: он генерирует итоговый документ путем объединения шаблонного документа и источника данных. Но в этом случае шаблонный документ имеет элементы управления содержимым или просто пользовательские текстовые заполнители с определенным синтаксисом (вместо MergeFields), и данные предоставляются в формате XML (вместо JSON).
Тем не менее, если вы все еще хотите использовать параметры слияния, вы в значительной степени рассмотрели все параметры, доступные в MergeFields.
Осталось только добавить поддержку дополнительных полей, связанных со слиянием почты, в зависимости от ваших конкретных требований (например, INCLUDEPICTURE, INCLUDETEXT, MERGESEQ, MERGEREC, NEXT и т. Д.).
Кроме того, поддержка некоторой формы группировки почтовых слияний была бы весьма полезной. При этом вы сможете объединить несколько записей в некотором диапазоне слияния.
Например, предположим, что вы определяете контент, который должен повторяться и заполняться на основе ваших записей, например, в одной строке таблицы, в которой есть несколько полей MergeFields. Затем с поддержкой этой функции вы сможете динамически генерировать новую строку для каждого элемента в некотором массиве JSON, а также для каждой строки будут иметь соответствующие данные из своего элемента.
Я надеюсь, что это дает вам некоторые идеи.
После моего комментария... Я действительно задавался вопросом, была ли перегружена string.ToString(), поэтому сделал дальнейший поиск.
В то время как string.ToString() не имеет перегрузки, double делает... так что, преобразуйте числовую строку в double, затем.ToString с требуемым числовым форматом.
https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings
Спасибо за поиск.