|
|
|
Открыть существующий файл Excel как новый | ☑ | ||
|---|---|---|---|---|
|
0
Rusel
27.12.24
✎
12:32
|
Всем привет!
Как программно из 1С открыть существующий файл Excel как новый? То есть чтобы Excel открылся, заполнился из существующего файла, но при этом не был записан. Есть какие-то простые способы это сделать? |
|||
|
1
Волшебник
27.12.24
✎
12:39
|
Используйте технологию OLE Automation
|
|||
|
2
АНДР
27.12.24
✎
12:54
|
Через свой шаблон файла Excel?
|
|||
|
3
Rusel
27.12.24
✎
12:56
|
Да, через свой шаблон файла Excel
|
|||
|
4
Rusel
27.12.24
✎
12:57
|
(1) Да, наверное, надо открыть книгу, создать новую книгу и скопировать всё из существующей в новую
|
|||
|
5
Rusel
27.12.24
✎
12:58
|
Просто думал вдруг есть какой-то более простой способ, без всех этих ОЛЕ-ОЛЕ
|
|||
|
6
Волшебник
27.12.24
✎
12:59
|
хе-хе
|
|||
|
7
maxab72
27.12.24
✎
13:03
|
А если хранить шаблон как шаблон .xlt .xltx? Он всегда будет открываться как новая книга.
|
|||
|
8
dmt
27.12.24
✎
13:03
|
(4) должно сработать Excel.workbooks.add(ПутьКШаблону)
|
|||
|
9
один я дАртаньян
27.12.24
✎
13:40
|
(0) Через двичные данные скопировать?
ДД = Новый ДвоичныеДанные(ПутьКФайлу); ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx"); ДД.Записать(ИмяВременногоФайла); |
|||
|
10
Волшебник
27.12.24
✎
13:10
|
(9) это на сервере или на клиенте?
|
|||
|
11
один я дАртаньян
27.12.24
✎
13:12
|
(10) ну можно попробовать
Вместо ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx"); Вставить ИмяВременногоФайла = ПутьКФайлу +"Х"; тогда и на клиенте наверное сработает. Надо тыкаться |
|||
|
12
arsik
гуру
27.12.24
✎
13:20
|
(9) Но он же откроется как уже существующий, просто он лежит в темпах. И при его сохранении он даже не спросит имя, а запишет в темпы.
|
|||
|
13
Волшебник
27.12.24
✎
13:23
|
(11) А зачем нам клиент-то? Давайте на сервере откроем файл Excel
|
|||
|
14
один я дАртаньян
27.12.24
✎
13:25
|
(13) Зависит от конкретизации задачи: "Как программно из 1С открыть существующий файл Excel как новый?".
|
|||
|
15
Волшебник
27.12.24
✎
13:28
|
(14) А, задумался, Дартаньян... Имей в виду!
|
|||
|
16
один я дАртаньян
27.12.24
✎
13:38
|
(12) И? В чем суть проблемы? Есть отдельный новый эксель, файл автоматически удалится потом как временный.
|
|||
|
17
LinuxOrg
27.12.24
✎
13:41
|
Процедура ОткрытьExcelКакНовый()
// Создаем COM-объект Excel ExcelApp = Новый COMОбъект("Excel.Application"); // Скрываем Excel, чтобы пользователь не видел промежуточные действия ExcelApp.Visible = Ложь; // Открываем существующий файл ПутьКФайлу = "C:\Путь\К\Файлу.xlsx"; ИсходнаяКнига = ExcelApp.Workbooks.Open(ПутьКФайлу); // Создаем новую книгу НоваяКнига = ExcelApp.Workbooks.Add(); // Копируем данные из первой книги в новую Для Каждого Лист Из ИсходнаяКнига.Sheets Цикл Лист.Copy(, НоваяКнига.Sheets(НоваяКнига.Sheets.Count)); КонецЦикла; // Закрываем исходную книгу, чтобы освободить ресурсы ИсходнаяКнига.Close(Ложь); // Показываем Excel пользователю с новой книгой ExcelApp.Visible = Истина; // Освобождаем COM-объекты ОсвободитьCOMОбъект(ИсходнаяКнига); ОсвободитьCOMОбъект(ExcelApp); КонецПроцедуры |
|||
|
18
Волшебник
27.12.24
✎
13:43
|
(17) ОсвободитьCOMОбъект — это галлюцинация
|
|||
|
19
Волшебник
27.12.24
✎
13:58
|
(17) Это тоже не сработает
![]() |
|||
|
20
arsik
гуру
27.12.24
✎
14:07
|
(16) Проблема в другом. Когда ты нажмешь сохранить, ты даже возможно и не поймешь куда он сохранился.
Но если файл новый, тогда откроется окно сохранения. |
|||
|
21
СвинТуз
27.12.24
✎
14:11
|
Загоните в табличный документ и откройте. (0)
|
|||
|
22
LinuxOrg
27.12.24
✎
14:27
|
[code]
Процедура ОткрытьExcelКакНовый(ПутьКФайлу) Экспорт
Если Не ПроверитьВходныеДанные(ПутьКФайлу) Тогда Возврат; КонецЕсли;
// Инициализация переменных
ExcelApp = Неопределено;
ИсходнаяКнига = Неопределено;
НоваяКнига = Неопределено;
ВременныйФайл = "";
Попытка
// Создаем приложение Excel
ExcelApp = СоздатьExcelПриложение();
Если ExcelApp = Неопределено Тогда Возврат; КонецЕсли;
// Открываем исходный файл
ИсходнаяКнига = ExcelApp.Workbooks.Open(ПутьКФайлу);
// Проверяем защиту структуры книги
Если ИсходнаяКнига.ProtectStructure Тогда
Сообщить("Ошибка: Структура исходной книги защищена.");
Возврат;
КонецЕсли;
// Создаем временный файл
ВременныйФайл = КаталогВременныхФайлов() + "Копия_" + УникальныйИдентификатор() + ".xlsx";
// Сохраняем временную копию
ИсходнаяКнига.SaveAs(ВременныйФайл);
// Закрываем исходную книгу
ИсходнаяКнига.Close(Ложь);
// Открываем временный файл как новую книгу
НоваяКнига = ExcelApp.Workbooks.Open(ВременныйФайл);
// Делаем Excel видимым для пользователя
ExcelApp.Visible = Истина;
Исключение
// Обрабатываем любые ошибки
Сообщить("Ошибка при обработке файла: " + ОписаниеОшибки());
КонецПопытки;
// Очистка ресурсов вне зависимости от наличия исключений
Если ИсходнаяКнига <> Неопределено Тогда
Попытка
ИсходнаяКнига.Close(Ложь);
КонецПопытки;
ИсходнаяКнига = Неопределено;
КонецЕсли;
Если НоваяКнига <> Неопределено Тогда
Попытка
НоваяКнига.Close(Ложь);
КонецПопытки;
НоваяКнига = Неопределено;
КонецЕсли;
Если ExcelApp <> Неопределено Тогда
Попытка
ExcelApp.Quit();
КонецПопытки;
ExcelApp = Неопределено;
КонецЕсли;
// Удаляем временный файл
Если ВременныйФайл <> "" И ФайлСуществует(ВременныйФайл) Тогда
Файл.Удалить(ВременныйФайл);
КонецЕсли;
КонецПроцедуры;
// Проверяет входные данные
Процедура ПроверитьВходныеДанные(ПутьКФайлу) Экспорт
Если Не ФайлСуществует(ПутьКФайлу) Тогда
Сообщить("Ошибка: Файл не найден: " + ПутьКФайлу);
Возврат Ложь;
КонецЕсли;
Если Прав(ПутьКФайлу, 5) <> ".xlsx" Тогда
Сообщить("Ошибка: Ожидается файл формата .xlsx");
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецПроцедуры;
// Создает объект Excel COM
Функция СоздатьExcelПриложение() Экспорт
Попытка
ExcelApp = Новый COMОбъект("Excel.Application");
ExcelApp.Visible = Ложь;
ExcelApp.DisplayAlerts = Ложь;
ExcelApp.ScreenUpdating = Ложь;
Возврат ExcelApp;
Исключение
Сообщить("Ошибка: Microsoft Excel не установлен или недоступен.");
Возврат Неопределено;
КонецПопытки;
КонецФункции;
[/code]
|
|||
|
23
Волшебник
27.12.24
✎
14:21
|
(22) а-ха-ха :)
![]() КонецКласса... Садись, два. |
|||
|
24
Волшебник
27.12.24
✎
14:23
|
||||
|
25
LinuxOrg
27.12.24
✎
14:28
|
(23) - Исправил. Повторите.
|
|||
|
26
Волшебник
27.12.24
✎
14:38
|
(25) ФайлСуществует - функция не найдена
|
|||
|
27
LinuxOrg
27.12.24
✎
14:50
|
Функция ФайлСуществует(ПутьКФайлу) Экспорт
Попытка Возврат Новый Файл(ПутьКФайлу).Существует(); Исключение // Если произошла ошибка при доступе к файлу, файл считается недоступным Возврат Ложь; КонецПопытки; КонецФункции; |
|||
|
28
Волшебник
27.12.24
✎
14:55
|
(27) выкрутился, фраер?...
после КонецФункции не нужна точка с запятой, а то выдаётся ошибка: Определения процедур и функций должны размещаться перед операторами тела модуля
Я же всегда найду, до чего доебаться |
|||
|
29
LinuxOrg
27.12.24
✎
15:00
|
ОК. Убери ее. Запустилось?
|
|||
|
30
Волшебник
27.12.24
✎
15:01
|
(29) Чтоб я запускал программный код от нейронки? Да ну нах
|
|||
|
31
LinuxOrg
27.12.24
✎
15:01
|
Мы только что переизобрели Test Driven Development.
А вы тут меня фраером обзываете |
|||
|
32
LinuxOrg
27.12.24
✎
15:02
|
(30) зашкварно? это хуже, чем быть петухом?
|
|||
|
33
Волшебник
27.12.24
✎
15:22
|
(31) фраер — это звучит гордо
Означает "свободный". То есть человек, который "на воле" Для блатного мир делится на своих (блатных, воров) и фраеров, то есть цивильных людей, не принадлежащих к воровскому миру. |
|||
|
34
maxab72
27.12.24
✎
15:22
|
frajer - по немецкий неженатый молодой человек, ухажер, щеголь; по польски - кавалер, щеголь, чайка...
|
|||
|
35
Волшебник
27.12.24
✎
15:23
|
(34) пишется "по-немецки"
|
|||
|
36
Garykom
гуру
27.12.24
✎
18:00
|
(0) Заполнение шаблонов?
|
|||
|
37
LinuxOrg
27.12.24
✎
18:09
|
Мы все делаем не так.
Нужно сначала топик стартера спросить про BDD спецификации того, что он хочет.
Функционал: Открытие существующего файла Excel как новой книги
Чтобы работать с существующим Excel-файлом как с новой независимой книгой
Как пользователь системы 1С
Я хочу открыть файл в Excel без сохранения изменений в оригинальный файл
Сценарий: Успешное открытие файла Excel как новой книги
Допустим, существует Excel-файл по пути "path_to_file.xlsx"
И приложение Microsoft Excel установлено на компьютере
Когда я открываю файл программно в 1С
И создаю временную копию файла
И открываю временную копию в Excel
Тогда оригинальный файл остается неизменным
И новая книга открывается в Excel
И новая книга не связана с оригинальным файлом
Сценарий: Попытка открыть несуществующий файл
Допустим, указан путь к несуществующему файлу "invalid_path.xlsx"
Когда я пытаюсь открыть файл программно в 1С
Тогда система выводит сообщение об ошибке "Файл не найден: invalid_path.xlsx"
И приложение Excel не запускается
Сценарий: Открытие файла неподдерживаемого формата
Допустим, существует файл по пути "unsupported_file_format.txt"
Когда я пытаюсь открыть файл программно в 1С
Тогда система выводит сообщение об ошибке "Ожидаемый формат файла: .xlsx"
И приложение Excel не запускается
Сценарий: Обработка защищенного файла
Допустим, существует защищенный Excel-файл по пути "protected_file.xlsx"
И файл защищен структурным паролем
Когда я пытаюсь открыть файл программно в 1С
Тогда система выводит сообщение об ошибке "Структура книги защищена и не может быть обработана"
И приложение Excel не запускается
Сценарий: Очистка временных данных после открытия файла
Допустим, существует Excel-файл по пути "path_to_file.xlsx"
Когда я открываю файл программно в 1С
И создаю временную копию файла
Тогда временный файл удаляется после завершения процесса
И все COM-объекты, созданные Excel, освобождаются
|
|||
|
38
LinuxOrg
27.12.24
✎
18:18
|
Требования из постановки задачи:
- Открытие существующего файла как нового: ✅ Полное Подробно описан процесс создания временной копии и открытия. - Оригинальный файл остается неизменным: ✅ Полное Оригинальный файл не изменяется, работает с копией. - Простота выполнения: ✅ Полное Спецификация читаема, шаги логичны и лаконичны. - Обработка исключений: ✅ Полное Описаны сценарии для ошибок (файл, формат, защита). - Очистка ресурсов: ✅ Полное Временные файлы удаляются, COM-объекты освобождаются. |
|||
|
39
LinuxOrg
27.12.24
✎
18:20
|
Топик стартера на мыло
Сценарий: Успешное открытие файла Excel как новой книги Сценарий: Очистка временных данных после открытия файла Это то, что ему нужно? |
|||
|
40
Волшебник
27.12.24
✎
18:49
|
(37)(38)(39) что это за бредятина? Опять галлюцинируете?
|
|||
|
41
LinuxOrg
27.12.24
✎
19:07
|
(40) это топик стартер должен сказать, бред это или нет
|
|||
|
42
lEvGl
гуру
27.12.24
✎
20:51
|
(0)Зачем в целом нужен эксель?
|
|||
|
43
LinuxOrg
27.12.24
✎
20:58
|
(42) то есть мы клиента доили доили. А потом он говорит: А зачем мне Excel?
Переделывайте все. Только на что? |
|||
|
44
lEvGl
гуру
27.12.24
✎
21:17
|
(43) в каком смысле? Вы похоже не туда доили, все должно быть в 1с. Тогда удой будет веселее.
|
|||
|
45
Rusel
28.12.24
✎
15:33
|
Всем привет! Я вернулся и за это время добавилось порядка 40 новых сообщений и тема ушла вниз. Прикольно, что простая, казалось бы, постановка вопроса вызвала столько споров. С учетом стрелочки вниз рядом с названием темы сомневаюсь, что теперь кто-либо из участников оного чата прочтёт мой ответ, но как бы то ни было (может я пишу тут сам для себя: "тут же нет никого!") отвечу по существу.
Данная тема волновала меня много лет, т.к. достаточно много было задач, когда надо сформировать из 1С файл Excel – к примеру, прайс-лист с оформлением, картинками, фильтрами, формулами и прочим, – и чтобы файл открылся и при этом не был записан. Касаемо примера с прайс-листом так и не шмог в своё время это сделать (не стал заморачиваться тогда) – я формировал табличный документ в 1С, потом открывал его через ОЛЕ и фигачил оформление и пихал туда заранее сформированные картинки. При этом в том варианте у пользователя данный файл уже был сохранен во временный каталог и имел специфичное имя типа v8_ФИГНЯМИГНЯ.xlsx Ща же возникла новая задача подобного типа – тоже надо сформировать экселечку и так же открыть просто как новый файл с условным названием Книга1, но при этом шоб книга она была ужо заполнена всем контентом юзерам нужным. |
|||
|
46
Rusel
28.12.24
✎
15:28
|
(17) Вот, кстати, похоже на рабочее решение. Покорнейше благодарю. Попробую и ещё раз отпишусь.
|
|||
|
47
Rusel
28.12.24
✎
15:30
|
(22) Вау, вот это кстати вообще красота. Даж свойство ProtectStructure проверяется, я б об этом даже не подумал) Респектус патронум)
|
|||
|
48
Rusel
28.12.24
✎
15:37
|
(37) Ничо не понял. Перечитал, снова ничего не понял.
|
|||
|
49
Rusel
28.12.24
✎
15:38
|
(41) Прошу прощения, но это действительно бред
|
|||
|
50
Rusel
28.12.24
✎
16:12
|
(42) Ну некоторые фичи в 1С не сделать. К примеру взаимодействия с разными контрагентами, у которых может не быть 1С. Вы же не будете им MXL отправлять (бу-га-га). Ещё фильтры всякие, формулы в Экселе. Да много чего ещё, что в табличном документе 1С родимом отсутствует)
|
|||
|
51
Волшебник
28.12.24
✎
17:40
|
(45) Снял утопление. С Новым годом!
|
|||
|
52
lEvGl
гуру
28.12.24
✎
18:01
|
(50) почему не буду отправлять xml? будет принимать, буду. причем без каких то там файликов. причем у него может быть и не 1С, потому и XML, это универсальный формат/стандарт, назовите как хотите
фильтры и формулы - для этого и есть программа |
|||
|
53
LinuxOrg
28.12.24
✎
20:37
|
(46) (47) профессия программиста в том виде, что существовала до 21го года умирает.
Вместо этого возникли две новые профессии: Промт Инженер Разработчик и Специалист по валидации и Фактчекингу, он же QA, В маленьких фирмах эти роли будут у одного человека. |
|||
|
54
Garykom
гуру
28.12.24
✎
21:00
|
(53) Нет
В маленьких фирмах только эникеи Программисты никуда не денутся Их наоборот потребуется еще больше Но будет еще большая специализация |
|||
|
55
LinuxOrg
28.12.24
✎
21:21
|
(48)
Сценарий: Успешное открытие файла Excel как новой книги Допустим, существует Excel-файл по пути "path_to_file.xlsx" И приложение Microsoft Excel установлено на компьютере Мой Комментарий: до этого места все ОК? Когда я открываю файл программно в 1С И создаю временную копию файла И открываю временную копию в Excel Мой Комментарий: До этого места теже понятно? Это то, что делает мой код. Тогда оригинальный файл остается неизменным И новая книга открывается в Excel И новая книга не связана с оригинальным файлом Мой Комментарий: Здесь же тоже все должно быть понятно? Мы открываем оригинальный файл и ничего там не меням. Спецификация того, что ты хочешь написана на языке Gherkin (Корнишон) https://testgrow.ru/article18 |
|||
|
56
Тындр
29.12.24
✎
23:17
|
(53) Не уверен. Промт инженер не задолбается делать промты только в очень простых (типовых, стандартных )случаях. Вангую, что при внедрении ЕРПИ на условном машзаводе промты четыре раза обогнут экватор ))
И, главное, фиг в них кто-то потом разберется, даже нейросеть )) |
|||
|
57
LinuxOrg
30.12.24
✎
12:07
|
(56) дай определение очень простых и стандартных случаев.
И да, задача ИИ писать продуктовый код, тестовый код, текст технических заданий, тексты Jira issues, делать оценки в стори поинтах и так далее. А не внедрять и оптимизировать процессы на предприятии. В первом параграфе я озвучил 80% всех процессов в продуктовой компании. И да, ИИ успешно решил задачу будучи Product Owner, QA и продуктовых программистом. За один час. А вот кожаные мешки уже неделю не могут дать фидбек, правильно ли он понял ТЗ и решил его. Так как не в курсе, что такое Gherkin и не могут его читать. |
|||
|
58
LinuxOrg
30.12.24
✎
12:10
|
И да, любая задача декомпозицией сводится до простых, стандартных и типовых случаев.
И это декомпоцию тоже может успешно делать ИИ. |
|||
|
59
LinuxOrg
30.12.24
✎
12:30
|
Так кто станет верификатром (22) и (27) в соответствии с (37) и (38)?
Или кожаные мешки уже засовывают в себя салат оливье? |
|||
|
60
Волшебник
30.12.24
✎
14:44
|
(59) Вы там со своими ботами как-нибудь сами, а нас и здесь неплохо кормят
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |