Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2014, 13:37   #1
Silvan90
Пользователь
 
Регистрация: 01.08.2011
Сообщений: 20
Злость Обработка Excell в потоке

Доброго времени суток!
Стоит задача ускорить обработку кучи документов в excel 2013. Решил воспользоваться потоками, т.е. 50 первых документов берет один поток, оставшиеся 50 другой поток.
Вот сама функция:
Код:
        public void Test(long From, long To)
        {
            Excel.Application App = new Excel.Application();
            Excel.Workbook Book;
            Excel._Worksheet Sheets;

            DirectoryInfo DirInf = new DirectoryInfo(@"C:\Users\тест");

            var files = Directory.GetFiles(DirInf.FullName);
            
                for (long i = From - 1; i < To - 1; i++)
                {
                        Book = App.Workbooks.Open(files[i]);
                        Book.CheckCompatibility = false;

                        Book.Worksheets.get_Item(1).Cells[1, "A"].value = "ХОХОХО";
                        Book.SaveAs(files[i].Replace("тест", "Тест" + From));
                        Book.Close(false, true, true);
                }
            App.Quit();
        }
Вот вызов:
Код:
        private void button1_Click(object sender, EventArgs e)
        {
            PrintingClass p = new PrintingClass();
            Task.Factory.StartNew(() => p.Test(1, 50));
            Task.Factory.StartNew(() => p.Test(51, 100));
            MessageBox.Show("Все");
        }
На строке Book = App.Workbooks.Open(files[i]); а иногда и на Book.Worksheets.get_Item(1).Cells[1, "A"].value = "ХОХОХО";
падает ошибка (причем два потока успевают проработать пару документов синхронно) :
Исключение типа "System.Runtime.InteropServices.COM Exception" возникло в Printing2.0.exe, но не было обработано в коде пользователя

Дополнительные сведения: Библиотека не зарегистрирована. (Исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))

При продолжении один поток падает, а второй дорабатывает до конца. Уже давно мучаюсь этим вопросом((((( Может есть идеи в чем дело?
Silvan90 вне форума Ответить с цитированием
Старый 04.09.2014, 20:07   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Нормальные люди получение списка файлов и их перебор делают в одном потоке, а уже обработку конкретного файла рассовывают по потокам или делают асинхронное выполнение и пущай там окружение само всё распихивает куда надо.
Например, при открытии файла в одном потоке создался временный файл в той же папке - в другом потоке получили другой перечень файлов в другой последовательности.
Если файлы в формате офиса 2007-2013, т.е. расширения файлов xlsx, и если нет работы с хитрыми формулами или еще какими особенными вещами, то какая-нибудь ClosedXML обработает их быстрее. Ну, и если печатать на принтер надо (о чём название проекта говорит), то опять же остаётся Excel.

Последний раз редактировалось pu4koff; 04.09.2014 в 20:11.
pu4koff вне форума Ответить с цитированием
Старый 04.09.2014, 21:22   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ускорить обработку кучи документов в excel 2013
Можно поинтересоваться, какого рода обработка? Что именно и как обрабатывается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из метода X в потоке А, вызвать метод Y и чтобы он работал в потоке B ? lawliet93 C# (си шарп) 0 09.03.2013 18:16
Что предпочтительнее - обработка событий асинхронно или в главном потоке? gramp C# (си шарп) 4 11.11.2012 18:57
Создание/изменение/удаление файлов в потоке. Мониторинг файлов в потоке. The Real Kos Общие вопросы Delphi 5 22.10.2012 23:58
обработка изображения в потоке Dеlphi Общие вопросы Delphi 8 04.03.2011 22:01
Excell asv193 Общие вопросы C/C++ 0 08.05.2009 21:06