Zamykanie pliku Excel

Zamykanie pliku Excel
SM
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 7 lat
  • Postów:5
0

Witam wszystkich!
Piszę właśnie program, który wertuje katalogi, wybiera pliki .xlsx i porównuje daną komórkę z pliku ze zmienną. Na małej ilości plików .xlsx program działa, lecz gdy w grę wchodzi kilkadziesiąt plików to program upada a w menadżerze zadań widnieją procesy excel.exe. Problem polega na tym że nie wiem gdzie wpisać funkcje excel.Quit()/wb.Close().
Mój kod:

Kopiuj
class Excel
    {
        String path = "";
        _Application excel = new _Excel.Application();
        Workbook wb;
        Worksheet ws;

        public Excel(String path, int Sheet)
        {
            this.path = path;
            wb = excel.Workbooks.Open(path);
            ws = wb.Worksheets[Sheet];
        }

        public String ReadCell(int i, int j)
        {
            i++;
            j++;

            if (ws.Cells[i, j].Value2 != null)
            {
                return ws.Cells[i, j].Value2;
            }
            else
                return "Brak wartosci w komorce.";
        }
    }
Kopiuj
public partial class Path_form : Form
    {
        public Path_form()
        {
            InitializeComponent();
        }

        public String OpenFile(String path)
        {

            Excel excel = new Excel(path, 1);

            return excel.ReadCell(1, 5);

        }

        public String GetPath(String path, string kerg)
        {

            String mask = "*.xlsx";

            String[] files = Directory.GetFiles(path, mask, SearchOption.AllDirectories);


            foreach (String file in files)
            {
                path = Path.GetFullPath(file);

                String result = OpenFile(path);
                if (kerg == result)
                {
                    MessageBox.Show(path);
                }
            }

            return path;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String path = pathForm.Text;
            String kerg = kergForm.Text;

            GetPath(path, kerg);
            
        }

    }
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0
Kopiuj
public String ReadCell(int i, int j)
        {
            i++;
            j++;
            try
            {
              if (ws.Cells[i, j].Value2 != null)
              {
                  return ws.Cells[i, j].Value2;
              }
              else
                  return "Brak wartosci w komorce.";
            }
            finally
            {
              wb.close();
            }
        }

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber
SM
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 7 lat
  • Postów:5
0

Niestety nadal otwierają sie pliki i nie zamykają. Przy 12 otwartych procesach wyświetla się błąd (Microsoft Excel)"Cannot use object linking and embedding".

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0

zamień wb.close(); na wb.close(0); excel.Quit();


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
SM
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 7 lat
  • Postów:5
0

Nadal się otwierają wszystkie i nie zamykają. Może problem leży w metodzie otworzenia pliku?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.