Member 14836748 Ответов: 0

Использование C# для заполнения документа слияния word mail


Привет,

У меня есть шаблон слияния почты, который похож на название банка в заголовке и список всех филиалов в деталях, в столбчатом формате = название филиала, адрес, менеджер, контактный номер и т. д

Мне нужно выбрать список филиалов из главной таблицы филиалов (ms access) для выбранного банка и заполнить их соответствующими cols (заголовки col уже есть в шаблоне).. Количество отделений может варьироваться от банка к банку.

Я использую Microsoft.Офис.Взаимодействие.Кодирование Word и C#... Могу ли я использовать модель TableStart и TableEnd для достижения этой цели? Как же так?

Пожелания
Чандру

Что я уже пробовал:

использование системы;
использование системы.Коллекции.Общий;
использование System.Linq;
использование System.Text;
использование Microsoft.Офис.- Взаимодействия.Слово;
использование System.Data.Для oledb;
использование System.Data;

пространство имен WordAuto
{
программа Открытый класс
{
//частная статическая строка MF_Name;

публичный статический пустота главный(строка[] аргументы)
{
//ОБЪЕКТ ОТСУТСТВУЮЩЕГО "НУЛЕВОГО ЗНАЧЕНИЯ"
AudDbConn метод oledbconnection = новый объект oledbconnection("поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных=Ф:/DBFOLDER/базы данных.# то#; сохранять сведения о безопасности=истина;для Jet oledb:с базы паролей=ACS1234");
DataSet ds = новый набор данных();
DataTable MFConfigDT = новый DataTable();
DataTable ColNameDT = новый DataTable();

Пропуск объекта = система.Отражение.Недостающий.Ценность;

Объект oTemplatePath = "F:/From SCS PC D Drive/GalaxyKM/проекты/Shiv/MergePrintNew9.dotx";

строка mfdatacol = "";

строка mftablename = "";
Логическое значение mfgrid = false;
строка mfgrdstend = "";

Строка Col_SocID = "";
Строка Col_FinYear = "";

строки filterexp = "";
Объекта datarow[] mfdatanam;
DataRow[] ColNames;

Приложение wordApp = новое приложение();
Document wordDoc = новый документ();

OleDbCommand cmd = new OleDbCommand("select * FROM MF_Config", AudDbConn);
OleDbDataAdapter da = новый OleDbDataAdapter();
да.Команды selectcommand = ЦМД;
da.Fill(MFConfigDT);

OleDbCommand cmd1 = new OleDbCommand("select * FROM Table_ColNames", AudDbConn);
Объект oledbdataadapter и DA1 = новый объект oledbdataadapter();
да.Команды selectcommand = cmd1;
da.Fill(ColNameDT);

int GridView = 0; // флаг для указания значения сетки в mailmerge

int SocId = 1; // ID выбранного общества - оно должно быть заполнено на основе общества, выбранного пользователем
int FyrID = 0; // идентификатор финансового года от мастера года на основе выбора пользователя

wordDoc = wordApp.Documents.Добавить(ссылка oTemplatePath, oMissing Реф oMissing Реф, Реф oMissing);
foreach (поле myMergeField в wordDoc.Поля)
{
int i = myMergeField.Индекс;

Диапазон rngFieldCode = myMergeField.Код;

Строка fieldText = rngFieldCode.Text.Trim();

Типа int32 endMerge = fieldText.Помощи indexOf("\\");

Int32 fieldNameLength = endMerge - 11;

String fieldName = fieldText.Substring(11, fieldNameLength);

// Дает имена полей, которые пользователь ввел в файл .dot

имяполя = имяполя.Отделка();

// **** РЕАЛИЗАЦИЯ ЗАМЕНЫ ПОЛЯ ИДЕТ ЗДЕСЬ ****//

// ПРОГРАММИСТ МОЖЕТ ИМЕТЬ ЗДЕСЬ СВОИ СОБСТВЕННЫЕ РЕАЛИЗАЦИИ

if (fieldName.StartsWith("TableStart"))
{
GridView = 1;
continue; // следующее имя поля слияния-это фактическое поле для печати в таблице

}
if (fieldName.StartsWith("Tablend"))
{
GridView = 0;
продолжить; // табличный процесс заканчивается
}

если (GridView == 1)
{
// данные таблицы процессов здесь

// данные таблицы процессов здесь

GridView = 0;
продолжить;

}

filterexp = "";

filterexp = "MF_Name = '" + fieldName.Метод toString() + "'";

mfdatanam = MFConfigDT.Select(filterexp);

по каждому элементу (объекта datarow Row в mfdatanam)
{
mfdatacol = строка["MF_DataCol"].Метод toString();
mftablename = строка["MF_TableName_1"].ToString();
mfgrid = конвертировать.ToBoolean(Строка["MF_Grid"]);
}

filterexp = "";
filterexp = "Col_Table_Name = '" + mftablename + "'";

ColNames = ColNameDT.Select(filterexp);

foreach (строка DataRow в ColNames)
{
Col_SocID = Строка["Col_SocID"].ToString(); // подбирает имена col из таблицы, указанной выше
Col_FinYear = Строка["Col_FinYear"].Метод toString();
}

Строка WhereClause = "";

если (Col_FinYear == "")
WhereClause = "WHERE" + Col_SocID + " = " + SocId;
еще
WhereClause = " WHERE '" + Col_SocID + " = '" + SocId + "' и '" + Col_FinYear + " = '" + FyrID + "'";

OleDbCommand cmd5 = new OleDbCommand("select" + mfdatacol + "from" + mftablename + WhereClause + "", AudDbConn);
cmd5.Соединение.Открыть();
результат строка = cmd5.Executescalar так().Метод toString();
cmd5.Соединение.Закрывать();

if (fieldName == "FinYear") // только для целей тестирования
результат = "2019-20";

маймергфилд.Выбрать();

wordApp.Selection.TypeText(результат);

}
wordDoc.SaveAs("F:/mergeout/MergeOutput.doc");
ВАР doc_close = (Майкрософт.Офис.- Взаимодействия.Слово._Document)wordDoc;
doc_close.Закрывать();
ВАР applicationclose = (Майкрософт.Офис.- Взаимодействия.Слово._Application)wordApp;
applicationclose.Бросить();

=======
Я могу сделать слияние для всех не=табличных данных. Моя таблица разделена TableStart и TableEnd с переменной no строки в таблице... Код для слияния табличных данных должен происходить между TableStart и TableEnd, когда GridView == 1. я не уверен, как продолжить обработку этого кода

CHill60

Раздел "Что я пробовал:" предназначен для того, чтобы вы могли поделиться кодом, который вы пробовали. Если вы прочитаете руководство по размещению, то увидите, что мы просим специфический вопросы. Это не обучающий или обучающий форум.

Ngo Tuong Dan

Да, я согласен с вами

0 Ответов