|
Excel. Чтение и запись в один раз | ☑ | ||
---|---|---|---|---|
0
Mandel
07.11.12
✎
20:39
|
Здравствуйте. Вопрос такой: происходит чтение данных из Excel, дозаписывается информация в открытый файл.
При saveas происходит ошибка, что файл уже занят, т.к. он открыт, что естественно: как это обойти? Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ИмяФайла); Состояние("Обработка файла Microsoft Excel..."); ExcelЛист = Excel.Sheets(НомерЛистаExcel); Исключение Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel."); Возврат ложь; ... Для Row = 1 По RowCount Цикл ФИО = ExcelЛист.Cells(Row,НомерКолонкиФИО).Text; НайденнаяСтрока = Задачи.Строки.Найти(ФИО,"ФизЛицо"); Если НайденнаяСтрока<>Неопределено Тогда ExcelЛист.Cells(Row,НомерКолонки).Text = НайденнаяСтрока.Сумма; КонецЕсли; КонецЦикла; ExcelЛист.Saveas(ИмяФайла); Excel.WorkBooks.Close(); |
|||
1
Mandel
07.11.12
✎
20:57
|
Какие есть варианты?
|
|||
2
Undefined vs NULL
07.11.12
✎
20:58
|
(0) закрыть файл
|
|||
3
kotletka
07.11.12
✎
20:58
|
(2)+1 ))
+com не кошерно, адо надо |
|||
4
Маленький Вопросик
07.11.12
✎
21:00
|
а нет возможности читать из csv?
|
|||
5
Mandel
07.11.12
✎
21:07
|
Стоп. Как я же закрою файл, но у меня будут в файле измененные данные:
Если НайденнаяСтрока<>Неопределено Тогда ExcelЛист.Cells(Row,НомерКолонки).Text = НайденнаяСтрока.Сумма; КонецЕсли; |
|||
6
МихаилМ
07.11.12
✎
21:11
|
что за ерунда
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel."); ---------------------------------- нормально все пишется и читается укажите версии ПО ос, office , к которому подсключаетесь (visible = true) (help , about) , 1с ----------------------------- и полный код -------------- скорее всего из-за неправильного закрытия ole.excel в памяти осталась висеть копия, которая и не даёт открыть файл на чтение. |
|||
7
Mandel
07.11.12
✎
21:21
|
Офис 2007. Вот полный код:
Процедура КнопкаЗаписатьВФайлНажатие(Элемент) ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.Заголовок = "Записать результат из файла"; //ДиалогВыбораФайла.Фильтр = "Лист Excel (*.xls,*.xlsx)|*.xls|*.xlsx"; ДиалогВыбораФайла.Фильтр = "Лист Excel (*.xlsx)|*.xlsx"; Если ДиалогВыбораФайла.Выбрать() Тогда ФайлНаДиске = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла); ИмяФайла = СтрЗаменить(ДиалогВыбораФайла.ПолноеИмяФайла,ДиалогВыбораФайла.Каталог,""); мЗаписатьДанныеExcel(ДиалогВыбораФайла.ПолноеИмяФайла); КонецЕсли; КонецПроцедуры Функция мЗаписатьДанныеExcel(ИмяФайла, НомерЛистаExcel = 1) Экспорт xlLastCell = 11; ВыбФайл = Новый Файл(ИмяФайла); Если НЕ ВыбФайл.Существует() Тогда Сообщить("Файл не существует!"); Возврат Ложь; КонецЕсли; Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ИмяФайла); Состояние("Обработка файла Microsoft Excel..."); ExcelЛист = Excel.Sheets(НомерЛистаExcel); Исключение Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel."); Возврат ложь; КонецПопытки; НомерКолонкиСумма = 3; ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell); RowCount = ActiveCell.Row; ColumnCount = ActiveCell.Column; Для Row = 1 По RowCount Цикл ФИО = ExcelЛист.Cells(Row,НомерКолонкиФИО).Text; НайденнаяСтрока = Задачи.Строки.Найти(ФИО,"ФизЛицо"); Если НайденнаяСтрока<>Неопределено Тогда ExcelЛист.Cells(Row,НомерКолонкиСумма).Text = НайденнаяСтрока.Сумма; КонецЕсли; КонецЦикла; Попытка ExcelЛист.Close(Истина, ИмяФайла); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Excel.WorkBooks.Close(); Excel = 0; Возврат Истина; КонецФункции // () |
|||
8
Mandel
07.11.12
✎
21:22
|
До этого файл открывалая для чтения информации и был закрыт так:
Excel.WorkBooks.Close(); Excel = 0; |
|||
9
Mandel
07.11.12
✎
21:24
|
Вместо ExcelЛист.Close(Истина, ИмяФайла); писал ExcelЛист.SaveAs(ИмяФайла);
|
|||
10
Mandel
07.11.12
✎
21:42
|
Что делаю не так?
|
|||
11
Mandel
07.11.12
✎
21:52
|
сделал сам вот так:
СохранениеФайла.Close(); //Excel.WorkBooks.Close(); Excel.Application.Quit(); |
|||
12
sttt
07.11.12
✎
22:26
|
чем бы дитя не тешилось...
|
|||
13
МихаилМ
07.11.12
✎
22:50
|
вроде все честно
кроме 2 раза ВыбФайл = Новый Файл(ИмяФайла); = ФайлНаДиске = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |