Вызов взаимодействия несколько раз для одного и того же файла, но с разными значениямиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Вызов взаимодействия несколько раз для одного и того же файла, но с разными значениями

Сообщение Anonymous »

Я работаю над небольшим полупроектом Hobi для своего домашнего офиса.
Мой код берет данные из 10 полей ввода (в коде, показанном здесь, я урезал их до 4 для удобства чтения), сделайте некоторые работают с этими данными, а затем пытаются открыть файл шаблона Word, чтобы заполнить его этими данными. Проблема в том, что иногда мне нужно только одно поле (поэтому будет открыт только один файл), но иногда мне нужно 2, 5 или 10. Когда я хочу открыть более одного файла, мой код все делает правильно, но все файлы заполняются данными. из последнего поля ввода (вместо этого файл 1 содержит данные из поля 1, файл 2 содержит данные из поля 2...).
Например

Код: Выделить всё

InputField 1 -> Data 1
InputField 2 -> Data 2
InputField 3 -> Data 3
должно привести к открытию трех файлов с данными 1 в первом, данными 2 во втором и данными 3 в третьем, но я получаю три файла, все заполненные данными 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»