Excel a C# do některé šablony na některých pc zapisuje neúměrně dlouho
Mam problem s hotovou aplikaci.
Na me vyvojarske masine funguje OK rychle.
Ale na jine masine s XP funguje silene dlouho!
V kodu je to okodovane jako //silene dlouho .
Zkratka program jakoby vytuhne na cca 1 minutu a nic nedela, nez se zobrazi dialog kam ulozit modifikovany soubor.
kod by mel otevrit Excelovsky soubor, zapsat do jedne bunky hodnotu a na uzivatelem zvolene umisteni adresarove cesty ulozit pozmeneny soubor.
Aplikace se zepta, kam ulozit soubor, ale pak prestane reagovat na minitu i dele.
Jaktoze je aplikace tak pomala?
Mozna je problem v sablone do ktere se zapisuje:
http://www.cpost.cz/assets/nastroje/uzitecne-infor mace/rck/Postovni_podaci_arch_nPA.xls
Protoze i na mem stroji mel program problem se zapisem do XLS souboru, musel jsem pouzit XLSX a teprve ten netuhne u me.
(Jinak pri obycejnem otevreni v Excelu varoval, ze jsou pouzity nejake zpetne nekompatibilni prvky)
Mozna pouziva sablona nestandardni znaky, protoze drive program zapisoval do jednodussiho souboru a to bylo bez problemu okamzite hotove!
string Path = @"c:\AVOX\PPAnew.xls";
// initialize the Excel Application class
// create the workbook object by opening the excel file.
Microsoft.Office.Interop.Excel.ApplicationClass app = null;
try
{
app = new Microsoft.Office.Interop.Excel.ApplicationClass();
// ... dalsi zpracovani ...
}
catch (Exception ex)
{
MessageBox.Show( ex.ToString() );
}
Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Open(Path,
0,
true,
5,
"",
"",
true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
"\t",
false,
false,
0,
true,
1,
0);
// Zapsani hodnoty do Excelu:
// Toto trva silene dlouho !
app.Cells[5, 2] = dateTimePicker1.Text;
saveFileDialog1.DefaultExt = "xls";
saveFileDialog1.Filter = "(*.xls)|*.xls";
saveFileDialog1.Title = "Vytvořit Excelovský soubor... kde ...";
object missing = System.Reflection.Missing.Value;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
workBook.SaveAs(saveFileDialog1.FileName, missing,
missing, missing, missing, missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
missing, missing, missing, missing, missing);
if (MessageBox.Show("Arch byl vytvořen. Přejete si jej otevřít teď?", "Otevřít dokument?", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
app.Workbooks.Close();
app.Application.Quit();
Marshal.ReleaseComObject(app);
Marshal.ReleaseComObject(workBook);
app = null;
workBook = null;
GC.GetTotalMemory(false);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.GetTotalMemory(true);
Process p = new Process();
p.StartInfo.FileName = saveFileDialog1.FileName.ToString();
p.Start();
return;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//workBook.SaveCopyAs(saveFileDialog1.FileName);
}
// object missing = System.Reflection.Missing.Value;
app.Workbooks.Close();
app.Application.Quit();
Marshal.ReleaseComObject(app);
Marshal.ReleaseComObject(workBook);
app = null;
workBook = null;
GC.GetTotalMemory(false);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.GetTotalMemory(true);
}