|
Открыть существующий файл 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) Вы там со своими ботами как-нибудь сами, а нас и здесь неплохо кормят
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |