|
Запись в существующий файл Excel | ☑ | ||
---|---|---|---|---|
0
zippygrill
28.04.20
✎
16:14
|
Всем привет!
Прошу вашего совета. Дано файл эксель xlsx. Построчно надо пройтись и заполнить столбец. Делаю так: Попытка Книга = ПолучитьCOMОбъект(ИмяФайла); Исключение ПоказатьПредупреждение(,ОписаниеОшибки()); Возврат; КонецПопытки; Лист = Книга.Worksheets(1); Для Сч = НомерСтрНачало по ФайлСтрок Цикл Лист.Cells(Сч, НомерСтолбцаКоличество).Value = Количество; КонецЦикла; Попытка Книга.SaveAs(Путь); Книга.Application.DisplayAlerts = False; Книга.Close(0); Исключение КонецПопытки; В результате файл сохраняется, даже заполняется столбец, но открываю его через Excel и там вот так https://www.screencast.com/t/Z4P4rlMFF Причем файл весит 9мб. Что я пропустил.. Раньше, работа с xls делал через Новый COMОбъект("Excel.Application"), но в силу того что стала возникать проблема с _filterDatabase переписал на ПолучитьCOMОбъект(ИмяФайла) |
|||
1
zippygrill
28.04.20
✎
16:48
|
апну
|
|||
2
zippygrill
28.04.20
✎
17:28
|
Создал пустой файл excel. Открываю норм, сетка видна, все команды на месте.
написал 4 строки работы с ним. Выполняю код: Книга = ПолучитьCOMОбъект(ИмяФайла); Лист = Книга.Worksheets(1); Лист.Cells(1, 1).Value = 99; Лист.SaveAs(ИмяФайла); Книга.Application.Quit(); Открываю заново файл, и там уже пустота. Я так понимаю что то с функцией SAveAs |
|||
3
ChMikle
28.04.20
✎
17:45
|
(2) он его в режиме "только для чтения" не открывает случаем ?
|
|||
4
zippygrill
29.04.20
✎
08:57
|
(3) Вот хз. Да даже если в таком режиме - ячейки то я должен увидеть
|
|||
5
ChMikle
29.04.20
✎
08:59
|
(4) попробуйте не указывая лист запись сделать
|
|||
6
zippygrill
29.04.20
✎
09:37
|
т.е. без изменения листа, просто сделать запись?
|
|||
7
ChMikle
29.04.20
✎
09:38
|
(6) угу , была у меня как-то такая несуразица, может поможет
|
|||
8
zippygrill
29.04.20
✎
09:41
|
Книга = ПолучитьCOMОбъект(ИмяФайла);
Лист = Книга.Worksheets(1); //Лист.Cells(1, 1).Value = 99; Лист.SaveAs(ИмяФайла); Книга.Application.Quit(); Все равно, пустой получается после записи. |
|||
9
zippygrill
29.04.20
✎
09:43
|
а если убрать SAveAs и оставить Quit - предложить сохранить сам эксель..
|
|||
10
ChMikle
29.04.20
✎
09:44
|
(8)
Книга = ПолучитьCOMОбъект(ИмяФайла); //Лист = Книга.Worksheets(1); //Лист.Cells(1, 1).Value = 99; Книга.Cells(1, 1).Value = 99; Книга.SaveAs(ИмяФайла); Книга.Application.Quit(); |
|||
11
zippygrill
29.04.20
✎
09:47
|
откуда у Книги Cells..
|
|||
12
ИУБиПовиц
29.04.20
✎
09:49
|
А если вставить Книга.ActiveWindow.DisplayWorkbookTabs = 1;
сколько листов будет? может он кудато не тудать пишет?:) И у saveas вроде еще второй параметр есть, попробуйте его указать (https://docs.microsoft.com/ru-ru/office/vba/api/excel.xlfileformat) |
|||
13
zippygrill
29.04.20
✎
09:51
|
(12) Ну у SaveAS вагон параметров))
|
|||
14
ИУБиПовиц
29.04.20
✎
09:53
|
(13) не ну остальные то точно не в тему:)
|
|||
15
zippygrill
29.04.20
✎
09:53
|
нет у него ActiveWindow
|
|||
16
ChMikle
29.04.20
✎
09:56
|
попробуйте, там по умолчанию в первый лист пишет
|
|||
17
zippygrill
29.04.20
✎
09:59
|
(16) пробовал. Книга.Cells не знает
|
|||
18
zippygrill
29.04.20
✎
09:59
|
Книга.SaveAs(ИмяФайла, "–4143");
Книга.SaveAs(ИмяФайла, "xlWorkbookNormal"); Оба завершают операию сохранения аварийно |
|||
19
ChMikle
29.04.20
✎
10:02
|
(19) файл на сервере лежит ?
|
|||
20
ChMikle
29.04.20
✎
10:03
|
может проблема с правами доступа пользователя к этому файлу
|
|||
21
zippygrill
29.04.20
✎
10:11
|
(19) клиент
|
|||
22
ChMikle
29.04.20
✎
10:16
|
(21) перекиньте на сервер что ли , может правда дело в доступе
|
|||
23
zippygrill
29.04.20
✎
10:21
|
а там нет Эксель
|
|||
24
Василий Алибабаевич
29.04.20
✎
10:23
|
(0) Нельзя делать Save и тут же Close. Нужно все-таки подождать пока файл запишется.
А вот это вот "DisplayAlerts = False;" все равно что набрать разгон перед стеной и закрыть глаза в надежде, что пронесет. |
|||
25
zippygrill
29.04.20
✎
10:27
|
Нельзя делать Save и тут же Close. Нужно все-таки подождать пока файл запишется. >> Откуда инфа? звучит бредово!
|
|||
26
ИУБиПовиц
29.04.20
✎
10:32
|
У себя переделал так, ексель стал открываться. Попробуйте тоже так
Команда1НаСервере(); ИмяФАйла = "C:\Users\E.Sknarev\Desktop\1.xlsx"; НомерСтолбцаКоличество = 1; Книга=Новый COMОбъект("Excel.Application"); Книга.Application.Workbooks.Open(ИмяФАйла); Лист = Книга.Worksheets(1); / Для Сч = 1 по 10 Цикл Лист.Cells(Сч, НомерСтолбцаКоличество).Value = 99; КонецЦикла; Попытка Книга.ActiveWorkbook.SaveAs(ИмяФАйла); Книга.Application.DisplayAlerts = False; Книга.Quit(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; |
|||
27
ChMikle
29.04.20
✎
10:32
|
(23) а подключение к екселю идет на сервере ?
|
|||
28
zippygrill
29.04.20
✎
11:01
|
(27) Нет - все на клиенте делается.
|
|||
29
zippygrill
29.04.20
✎
11:02
|
Книга=Новый COMОбъект("Excel.Application"); - вот так SaveAs то у меня работает
А надо чтобы Книга = ПолучитьCOMОбъект(ИмяФайла); |
|||
30
ChMikle
29.04.20
✎
11:28
|
(29) может забить тогда и делать как получается :))
|
|||
31
zippygrill
30.04.20
✎
09:46
|
(30) для этого нужно пересохранять в excel 2007 или какой то там старый
|
|||
32
ChMikle
30.04.20
✎
09:49
|
(31) м.б. с версией екселя что-то связанно
|
|||
33
Fedor-1971
30.04.20
✎
10:06
|
(29) попробуй так:
Книга.Save(0); - если правильно помню, то это записать без выдачи вопросов, возможно без параметра 0. Только нужно учесть, что файл будет один Книга.Display(1) - если делаешь на клиенте, то, на время отладки, просто покажи заполняемую книгу Смотри отладчиком процесс заполнения, как минимум, пишешь в каком-то другом формате (например, .XLS вместо .XLSx) |
|||
34
zippygrill
30.04.20
✎
10:54
|
(33)
Вот так? Книга = ПолучитьCOMОбъект(ИмяФайла); Лист = Книга.Worksheets(1); Лист.Cells(1, 1).Value = 99; Книга.Save(0); Книга.Application.Quit(); |
|||
35
zippygrill
30.04.20
✎
10:59
|
Вот так сохраняет, но файл при открытии в эксель опять пустой, книги нет
Книга = ПолучитьCOMОбъект(ИмяФайла); Лист = Книга.Worksheets(1); Лист.Cells(1, 1).Value = 99; Книга.Save(); //Книга.SaveAs(ИмяФайла, "–4143"); Книга.Application.Quit(); |
|||
36
zippygrill
30.04.20
✎
11:00
|
здесь вообще SAve указывают что без параметров https://docs.microsoft.com/ru-ru/office/vba/api/excel.workbook.save
|
|||
37
Fedor-1971
30.04.20
✎
11:13
|
(35) тогда включай отображение Exel и смотри как заполняется файл и как записывается
|
|||
38
Fedor-1971
30.04.20
✎
11:43
|
37+ Я правильно понимаю?
Существует (!!!) файл, например, D:\ИмяФайла.XLSx, в нём есть листы Открываем его кодом, изменяем, записываем, закрываем При открытии через ексель: листы пропали, файл гнутый? Посмотри, на всякий случай, есть ли в каталоге скрытый файл с тильдой (символ "~") dir d:\*ИмяФайла*.* /A это признак, что файл изменяется и не закрыт |
|||
39
zippygrill
30.04.20
✎
11:44
|
(37) Не нахожу такого метода у COM
|
|||
40
zippygrill
30.04.20
✎
11:44
|
(38) При открытии через ексель: листы пропали, файл гнутый? - да
|
|||
41
zippygrill
30.04.20
✎
11:46
|
(38) Посмотри, на всякий случай, есть ли в каталоге скрытый файл с тильдой (символ "~") - нет таких.
Появляются только когда непосредственно открываю в excel |
|||
42
Fedor-1971
30.04.20
✎
11:50
|
(39) Что-то типа:
Книга.Application.DisplayAlerts = true Книга.Visible |
|||
43
Fedor-1971
30.04.20
✎
11:57
|
Попробуй сравнить в отладчике
Книга=Новый COMОбъект("Excel.Application"); Книга.Application.Workbooks.Open(ИмяФАйла); и Книга = ПолучитьCOMОбъект(ИмяФайла); - тут может прихватиться какой-нить просмотрщик файлов, а не ексель Возможно, что получать объект надо так: ПолучитьCOMОбъект(ИмяФайла, "Excel.Application"); |
|||
44
zippygrill
30.04.20
✎
12:03
|
(43) если указать ПолучитьCOMОбъект(ИмяФайла, "Excel.Application") то: Ошибка получения объекта COM: -2147467262(0x80004002): Интерфейс не поддерживается
|
|||
45
zippygrill
30.04.20
✎
12:03
|
(43) тут может прихватиться какой-нить просмотрщик файлов, а не ексель - там точно эксель, потому как вижу его свойства и методы
|
|||
46
Fedor-1971
30.04.20
✎
12:08
|
(44) тогда у меня идеи закончились
|
|||
47
zippygrill
30.04.20
✎
12:11
|
спс что поделился ими ))
|
|||
48
v77
30.04.20
✎
13:03
|
(0) Выложил бы файл. Люди бы глянули и сказали сразу. А так гадать не перегадать.
|
|||
49
zippygrill
30.04.20
✎
13:20
|
файл до обработки https://yadi.sk/i/FWu4zCXh4uG-Uw
файл после обработки https://yadi.sk/i/5AOIVq3pLzGQ7w вот выполняемый код на клиенте Книга = ПолучитьCOMОбъект(ИмяФайла); //, "Excel.Application"); Книга.Application.DisplayAlerts = true; Книга.Application.Visible = true; Лист = Книга.Worksheets(1); Лист.Cells(1, 1).Value = 99; Книга.Save(); |
|||
50
v77
30.04.20
✎
13:46
|
А попробуй
Лист.Visible = True; Книга.Save(); |
|||
51
v77
30.04.20
✎
13:47
|
Сделай лист видимым перед сохранением
|
|||
52
v77
30.04.20
✎
13:49
|
Ну и не забывай
Лист = 0; Книга = 0; |
|||
53
zippygrill
30.04.20
✎
13:59
|
(52) все равно белый эксель
Книга = ПолучитьCOMОбъект(ИмяФайла); //, "Excel.Application"); Книга.Application.DisplayAlerts = true; Книга.Application.Visible = true; Лист = Книга.Worksheets(1); Лист.Cells(1, 1).Value = 99; Лист.Visible = true; Книга.Save(); Лист = 0; Книга = 0; |
|||
54
v77
30.04.20
✎
14:11
|
Ну как бы суть в том, что лист скрывается. Капать в эту сторону надо.
|
|||
55
v77
30.04.20
✎
15:13
|
А так?
Лист.Activate(); Лист.Visible = true; Книга.Save(); |
|||
56
zippygrill
30.04.20
✎
15:17
|
(55) Нет к сожалнию
|
|||
57
zippygrill
30.04.20
✎
15:17
|
сожалению
|
|||
58
v77
30.04.20
✎
15:20
|
фигня какая то. у меня всё работает
|
|||
59
zippygrill
30.04.20
✎
15:21
|
Вот так?
Книга = ПолучитьCOMОбъект(ИмяФайла); //, "Excel.Application"); Книга.Application.DisplayAlerts = true; Книга.Application.Visible = true; Лист = Книга.Worksheets(1); Лист.Cells(1, 1).Value = 99; Лист.Activate(); Лист.Visible = true; Книга.Save(); Лист = 0; Книга = 0; |
|||
60
v77
30.04.20
✎
16:11
|
вот так
|
|||
61
zippygrill
30.04.20
✎
16:16
|
у тебя Close у меня Save))
|
|||
62
v77
30.04.20
✎
16:21
|
не. дело в
Книга.Windows(1).Visible = True; |
|||
63
v77
30.04.20
✎
16:21
|
ну и закрывать книгу тоже надо
|
|||
64
zippygrill
30.04.20
✎
16:24
|
Книга.Windows(1).Visible = False; - тоже плохо будет закрыватся7
|
|||
65
v77
30.04.20
✎
16:24
|
(64) не знаю. знаю что (60) работает
|
|||
66
v77
30.04.20
✎
16:28
|
короче, прятались не листы, а вся книга
|
|||
67
zippygrill
01.05.20
✎
18:35
|
отлично, спс!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |