Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Microsoft Office и VBA > Microsoft Office Excel
Регистрация

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 21.08.2012, 18:23   #1
Bi0max
 
Регистрация: 11.08.2012
Сообщений: 8
Репутация: 10
По умолчанию Есть кто-нибудь, кто работал с файлами excel на c#?

Есть кто-нибудь, кто работал с файлами excel на c#?? Желательно, с помощью Microsoft.Office.Interop.Excel
Bi0max вне форума   Ответить с цитированием
Старый 21.08.2012, 18:30   #2
doober
Профессионал
 
Аватар для doober
 
Регистрация: 02.05.2009
Адрес: Леса Мордовии
Сообщений: 3,903
Репутация: 650

skype: d_ober1
По умолчанию

Вам сюда
Вариантов море
__________________
Анализ,обработка данных Недорого
doober вне форума   Ответить с цитированием
Старый 21.08.2012, 19:50   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Адрес: Россия, Урал
Сообщений: 6,838
Репутация: 1220

skype: ExcelVBA.ru
По умолчанию

На форуме есть специальный раздел для пишущих на C#
http://programmersforum.ru/forumdisplay.php?f=59

Цитата:
Есть кто-нибудь, кто работал с файлами excel на c#?
а вы сами как думаете?
сомневаюсь, что вы - первопроходец в этом вопросе...
EducatedFool вне форума   Ответить с цитированием
Старый 21.08.2012, 20:40   #4
Bi0max
 
Регистрация: 11.08.2012
Сообщений: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Вам сюда
Вариантов море
С самой работой с файлом в c# нет особых проблем. Пользуюсь Microsoft.Office.Interop.Excel.

Единственная проблема: со скоростью чтения в excel файл и записи обратно в excel файл. Чтение файла размером 300*120 примерно занимает порядка 25-30 секунд. Это еще более-менее. Но запись идет где-то 4 минуты(это в существующий файл с форматированием(имеется ввиду размеры столбцов\строк, цвета и т.п. уже указаны). В пустой файл запись идет 2 минуты, что тоже очень долго. Файлов нужно обработать порядка 100-200.

Я поэтому и хотел задать вопрос, может можно сделать что-то вроде вызова кусков кода VBA например под c# для чтения и записи? Возможно, это что-то даст. Это я к примеру. Или какие-то еще фишки из excel.
Bi0max вне форума   Ответить с цитированием
Старый 21.08.2012, 20:54   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Адрес: Россия, Урал
Сообщений: 6,838
Репутация: 1220

skype: ExcelVBA.ru
По умолчанию

Чтение файла размером 300*120 на VBA занимает около секунды,
запись файла - пример столько же.

Либо в вашем файле слишком много сложных формул, либо вы что-то не так делаете...
EducatedFool вне форума   Ответить с цитированием
Старый 21.08.2012, 21:02   #6
Казанский
Профессионал
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
Репутация: 938
По умолчанию

Объекты Excel для VBA - такие же внешние объекты, как для любой другой программной среды.
Чтение/запись значений и формул надо делать не поячеечно, а сразу на весь диапазон - это ускоряет процесс в десятки раз.
Форматирование надо по возможности накладывать на целые строки и столбцы.
На время внесения изменений отключать автоматическтй пересчет, события приложения, обновление экрана (если окно приложения видимое) - это обсуждалось много раз.
__________________
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума   Ответить с цитированием
Старый 21.08.2012, 21:05   #7
Bi0max
 
Регистрация: 11.08.2012
Сообщений: 8
Репутация: 10
По умолчанию

Казанский, если есть ссылки на эти обсуждения, скиньте, пожалуйста.

Последний раз редактировалось Bi0max; 21.08.2012 в 21:49.
Bi0max вне форума   Ответить с цитированием
Старый 21.08.2012, 21:22   #8
Bi0max
 
Регистрация: 11.08.2012
Сообщений: 8
Репутация: 10
По умолчанию

Казанский, я просто искал ответ на эту тему. Ничего не нашел. Нашел про отключение событий приложения, обновления экрана, видимость приложения. Это я отключил, но к сожалению, не помогло. Вот про автоматический пересчет в первый раз услышал, но попробую найти, где отключить.

Форматирование я из приложения не делаю, я записываю просто в отформатированный файл.

А вот насчет чтения и записи не поячеечно я и пытался найти везде. На скольких форумах спросил, никто не отвечал на это.
Вы имеете ввиду, например вставить целый массив в диапозон?
Bi0max вне форума   Ответить с цитированием
Старый 21.08.2012, 21:53   #9
Казанский
Профессионал
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
Репутация: 938
По умолчанию

Ну, это настолько общее место... ключевое слово Value.
Например,
Код:
MyRange.Value = MyArr
(в VBA). Одномерный массив соответствует строке в Excel, для заполнения столбца или двумерного диапазона нужно формировать двумерный массив.
__________________
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума   Ответить с цитированием
Старый 21.08.2012, 22:14   #10
doober
Профессионал
 
Аватар для doober
 
Регистрация: 02.05.2009
Адрес: Леса Мордовии
Сообщений: 3,903
Репутация: 650

skype: d_ober1
По умолчанию

Во вложении класс для вывода таблицы в Excel на VBnet,без труда переконвертируете в в C#
Выводит очень быстро.

добавил
чтение из файла,234 столбца на 4 тыс строк обрабатывает быстро
За корректность кода на C# не отвечаю,через конвертор работал

Код:
private void Button5_Click(System.Object sender, System.EventArgs e)
{
	Tovar1.Прайс.Clear();
	// Tovar1.WriteXml("Tovar1.xml")
	OpenFileDialog1.Filter = "   (*.xls*) |*.xls*";

	if (OpenFileDialog1.ShowDialog() == DialogResult.OK) {
		dynamic pfile = OpenFileDialog1.FileName;

		Excel.Application xlApp = new Excel.Application();
		//  Try
		Excel.Workbook book = xlApp.Workbooks.Open(pfile);

		Excel.Worksheet sheets = default(Excel.Worksheet);

		sheets = book.Worksheets(1);


		dynamic lLastCol = sheets.Range("iv1").End(-4159).Column;

		dynamic lLastRow = sheets.UsedRange.Rows.Count;
		dynamic DD = sheets.Range(sheets.Range("A1"), sheets.Cells(lLastRow, lLastCol)).Value;

		xlApp.Quit();

		for (n = 2; n <= lLastRow; n++) {
			Tovar1.Прайс.Rows.Add();
			for (m = 1; m <= lLastCol; m++) {
				Tovar1.Прайс.Rows(n - 2).Item(m - 1) = DD(n, m);

			}

		}

	}

	Tovar1.WriteXml("Tovar1.xml");

}
Вложения
Тип файла: rar OfficeExcel.rar (1.5 Кб, 52 просмотров)
__________________
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 21.08.2012 в 22:21.
doober вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не знаю как выполнить.кто-нибудь...ну кто-нибудь... blina Общие вопросы по Java, Java SE, Kotlin 1 12.05.2010 11:43
Кто нибудь работал с Astron SiteManager? Начинающая Софт 2 15.07.2008 17:11


00:23.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.