У меня есть шаблон в excel, с помощью которого я делаю отчеты из своего приложения.
Каждый раз, когда я генерирую отчет, он сохраняется в папке с фиксированным именем и переменной, чтобы это не всегда был один и тот же документ.
У меня есть этот код, чтобы открыть шаблон
Excel.Application app = new Excel.Application();
Excel._Workbook book;
Excel._Worksheet sheet;
libro = app.Workbooks.Open(@"path", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
При этом я сохраняю и генерирую имя со счетчиком в 0
string paths= @"path";
string name= "Report_.xlsx";
while (File.Exists(System.IO.Path.Combine(paths, name)))
{
int i = 1;
name= string.Format("Report_{0}.xlsx",i);
}
string fullpath = Path.Combine(paths, name);
book.SaveAs(fullpath, Excel.XlFileFormat.xlOpenXMLWorkbook, Missing.Value, Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlUserResolution, true, Missing.Value, Missing.Value, Missing.Value);
book.Close(0);
app.Quit();
Проблема в том, что я могу сгенерировать только два отчета, но затем я пытаюсь сгенерировать третью сторону, и приложение зависает, и я не получаю никаких исключений, оно только зависает, но только когда я пытаюсь создать третий документ
Переместите инициализацию переменной счетчика за пределы цикла
string paths= @"path";
string name= "Report_.xlsx";
int i = 1;
while (File.Exists(System.IO.Path.Combine(paths, name)))
{
name= string.Format("Report_{0}.xlsx",i);
i++;
}
string fullpath = Path.Combine(paths, name);
book.SaveAs(fullpath, Excel.XlFileFormat.xlOpenXMLWorkbook, Missing.Value, Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlUserResolution, true, Missing.Value, Missing.Value, Missing.Value);
book.Close(0);
app.Quit();
Вы не увеличиваете переменную «i». Вы должны объявить его вне цикла while, а затем увеличить перед использованием:
string paths= @"path";
string name= "Report_.xlsx";
int i = 0;
while (File.Exists(System.IO.Path.Combine(paths, name)))
{
i++;
name= string.Format("Report_{0}.xlsx",i);
}
string fullpath = Path.Combine(paths, name);
book.SaveAs(fullpath, Excel.XlFileFormat.xlOpenXMLWorkbook, Missing.Value, Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlUserResolution, true, Missing.Value, Missing.Value, Missing.Value);
book.Close(0);
app.Quit();