Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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);
}

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny