Имя: Пароль:
1C
1С v8
Открыть существующий файл 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) Вы там со своими ботами как-нибудь сами, а нас и здесь неплохо кормят
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс