Мой код берет данные из 10 полей ввода (в коде, показанном здесь, я урезал их до 4 для удобства чтения), сделайте некоторые работают с этими данными, а затем пытаются открыть файл шаблона Word, чтобы заполнить его этими данными. Проблема в том, что иногда мне нужно только одно поле (поэтому будет открыт только один файл), но иногда мне нужно 2, 5 или 10. Когда я хочу открыть более одного файла, мой код все делает правильно, но все файлы заполняются данными. из последнего поля ввода (вместо этого файл 1 содержит данные из поля 1, файл 2 содержит данные из поля 2...).
Например
Код: Выделить всё
InputField 1 -> Data 1
InputField 2 -> Data 2
InputField 3 -> Data 3
Это код, который подготавливает данные:
Код: Выделить всё
private void OtvoriBanke(object sender, RoutedEventArgs e)
{
Dictionary placeholderValues = new Dictionary();
var template = "";
string otvori_printaj = "1";
List BANKA_NAZIV = new List {};
List BANKA_ADRESA = new List { };
List BANKA_GRAD = new List { };
if (OstavineBanke_BEZPRINTANJA.IsChecked == true) { otvori_printaj = "0"; }
template = ConfigurationManager.AppSettings["cfg_GlavniFolder"] + "\\banke\\o_BANKE_m.dotx";
if (OstavineB1_poslati.IsChecked == true)
{
BANKA_NAZIV.Add(OstavineB1_banka.Text);
BANKA_ADRESA.Add(OstavineB1_adresa.Text);
BANKA_GRAD.Add(OstavineB1_grad.Text);
}
if (OstavineB2_poslati.IsChecked == true)
{
BANKA_NAZIV.Add(OstavineB2_banka.Text);
BANKA_ADRESA.Add(OstavineB2_adresa.Text);
BANKA_GRAD.Add(OstavineB2_grad.Text);
}
if (OstavineB3_poslati.IsChecked == true)
{
BANKA_NAZIV.Add(OstavineB3_banka.Text);
BANKA_ADRESA.Add(OstavineB3_adresa.Text);
BANKA_GRAD.Add(OstavineB3_grad.Text);
}
if (OstavineB4_poslati.IsChecked == true)
{
BANKA_NAZIV.Add(OstavineB4_banka.Text);
BANKA_ADRESA.Add(OstavineB4_adresa.Text);
BANKA_GRAD.Add(OstavineB4_grad.Text);
}
Dictionary[] matrix = new Dictionary[]
{
new Dictionary(),
new Dictionary(),
new Dictionary(),
new Dictionary()
};
for (int i = 0; i < BANKA_NAZIV.Count(); i++)
{
placeholderValues[""] = BANKA_NAZIV[i];
placeholderValues[""] = BANKA_ADRESA[i];
placeholderValues[""] = BANKA_GRAD[i];
matrix[i] = placeholderValues;
}
Thread thread = new Thread(() => WordPrint.WordPrint.FindReplacePrint_T(template, matrix, ConfigurationManager.AppSettings["cfg_PrinterGlavni"], otvori_printaj));
thread.Start(); }
Код: Выделить всё
public static void FindReplacePrint_T(string InputTemplate, Dictionary[] placeholderValues_int, string Printer, string Primjeraka, string HEADER_UPP = "ne", string HEADER_IP = "ne")
{
Kamion.MainWindow.StatusBarObrada("print_start");
foreach (var placeholderValues in placeholderValues_int)
{
if(!placeholderValues.ContainsKey("")) { continue; }
placeholderValues[""] = ConfigurationManager.AppSettings["cfg_Sjediste"];
// Create an instance of Word Application
var wordApp = new Word.Word.Application();
// Disable alerts and make the application invisible
wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
wordApp.Visible = false;
if (Primjeraka == "0")
{
wordApp.Visible = true;
}
// Open the Word document
try
{
object missing = System.Reflection.Missing.Value;
var doc = wordApp.Documents.Open(@InputTemplate, missing, true);
// Loop through the placeholder values dictionary
foreach (var placeholder in placeholderValues)
{
// Find and replace placeholders with values
Find findObject = wordApp.Selection.Find;
findObject.ClearFormatting();
findObject.Text = placeholder.Key;
findObject.Replacement.ClearFormatting();
findObject.Replacement.Text = placeholder.Value;
// Perform the find and replace operation
object replaceAll = WdReplace.wdReplaceAll;
findObject.Execute(Replace: replaceAll);
}
// Print the document to the default printer
if (Primjeraka != "0")
{
var praviDefault = doc.Application.ActivePrinter;
doc.Application.ActivePrinter = Printer;
doc.PrintOut(Background: false, Copies: Primjeraka);
doc.Application.ActivePrinter = praviDefault;
// Close the document without saving changes
doc.Close(SaveChanges: false);
}
wordApp.NormalTemplate.Saved = true;
if (Primjeraka != "0")
{
// Quit the Word application
wordApp.Quit();
}
}
catch (Exception ex)
{
if (ex.ToString().Contains("deleted?"))
{
MessageBox.Show("Fajl nije pronađen! Provjeriti folder sa templejtima.", "Greška!", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
MessageBox.Show("Greška: " + ex, "Greška!", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
Kamion.MainWindow.StatusBarObrada("print_end");
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ent-values