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