powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel установка имени файла без сохранеия самого файла
21 сообщений из 21, страница 1 из 1
Excel установка имени файла без сохранеия самого файла
    #38150348
макс_гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача такая, нужно прописать в новый документ экселя путь к файлу, куда документ должен быть сохранён, но не сохранять его.

Моя программа формирует отчёт в файле экселя, и нужно упростить пользователю процесс его сохранения, т.е. убрать процесс длительного ввода имени файла.


Например, надо, чтобы файл был сохранён "c:\ddd,xls"
я создаю документ экселя, куда-то записываю этот путь.
Если документ закрыть, то ничего не будет, и файл не сохранится, если документ сохранить, то он сохранится под именем "c:\ddd,xls"

Подскажите куда нужно прописать путь к файлу и имя файла? К сожалению, имею только общие представления об АПИ экселя...
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38150429
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
макс_гость,

Лучшее, что могу предложить сделать вот так:
Код: vbnet
1.
xlApp.DefaultFilePath = "C:\"


Но имя файлы так не задать. Чтобы еще и имя файла поменять, можно либо создать код в excel при помощи VBE, либо создать template с аналогичным кодом.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38151018
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lbppbмакс_гость,

Лучшее, что могу предложить сделать вот так:
Код: vbnet
1.
xlApp.DefaultFilePath = "C:\"


Но имя файлы так не задать. Чтобы еще и имя файла поменять, можно либо создать код в excel при помощи VBE, либо создать template с аналогичным кодом.

Т.е. это будет что-то типа в документе будет кнопка "Сохранить", по нажатию на которую документ сохраниться в место, которое я из своей программы запишу в какую-либо ячейку документа?
Или можно перехватить само сохранение (ctrl+s) и подставить опять же путь к файлу, который я могу положить в какую-либо ячейку?
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38151040
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
max_alusТ.е. это будет что-то типа в документе будет кнопка "Сохранить", по нажатию на которую документ сохраниться в место, которое я из своей программы запишу в какую-либо ячейку документа?
Или можно перехватить само сохранение (ctrl+s) и подставить опять же путь к файлу, который я могу положить в какую-либо ячейку?

я имею ввиду, что при нажатии на "Сохранить" выполнится макрос, который сохранит, или макрос повесить на какое-либо события типа OnSave (если конечно такое там это возможно), который выполнится при возникновении этого события?
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38151131
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_alus,

В качестве примера я написал вот такую процедурку:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub NewExcel()

Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook

Set xlApp = New Excel.Application
xlApp.Visible = True

Set xlWbk = xlApp.Workbooks.Add

xlApp.DefaultFilePath = "C:\"

End Sub


Новый путь для сохранения вы задаете при создании вашего отчета в Excel. Когда пользователь нажимает на Сохранить или Сохранить как, то путь по умолчанию тот, что вы указали при создании.

Если же нужно, чтобы при этом и имя файла задавалось свое, то как я уже указал раньше, потребуется либо создать код в самом Excel отчете при помощи VBE при его создании, либо создать Excel template/add-in с аналогичным кодом.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38151232
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное!
Есть непонятный момент - кто должен скрипт запускать? Пользователь или он запустится автоматом при каком-то событии?
В данный момент не могу проверить ничего, смогу только завтра. Возможно, проблемы сразу уйдут.


lbppbmax_alus,

В качестве примера я написал вот такую процедурку:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub NewExcel()

Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook

Set xlApp = New Excel.Application
xlApp.Visible = True

Set xlWbk = xlApp.Workbooks.Add

xlApp.DefaultFilePath = "C:\"

End Sub


Новый путь для сохранения вы задаете при создании вашего отчета в Excel. Когда пользователь нажимает на Сохранить или Сохранить как, то путь по умолчанию тот, что вы указали при создании.

Если же нужно, чтобы при этом и имя файла задавалось свое, то как я уже указал раньше, потребуется либо создать код в самом Excel отчете при помощи VBE при его создании, либо создать Excel template/add-in с аналогичным кодом.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38151258
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_alusСпасибо огромное!
Есть непонятный момент - кто должен скрипт запускать? Пользователь или он запустится автоматом при каком-то событии?
В данный момент не могу проверить ничего, смогу только завтра. Возможно, проблемы сразу уйдут.


lbppbmax_alus,

В качестве примера я написал вот такую процедурку:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub NewExcel()

Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook

Set xlApp = New Excel.Application
xlApp.Visible = True

Set xlWbk = xlApp.Workbooks.Add

xlApp.DefaultFilePath = "C:\"

End Sub


Новый путь для сохранения вы задаете при создании вашего отчета в Excel. Когда пользователь нажимает на Сохранить или Сохранить как, то путь по умолчанию тот, что вы указали при создании.

Если же нужно, чтобы при этом и имя файла задавалось свое, то как я уже указал раньше, потребуется либо создать код в самом Excel отчете при помощи VBE при его создании, либо создать Excel template/add-in с аналогичным кодом.


Я же написал, что путь задаете при создании отчета. Каким образом вы создаете отчет? Какая программа его создает?
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38151288
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lbppb,

Про путь я понял, сейчас меня интересует имя файла.

Я должен написать скрипт, который при сохранении файла перехватит сохранение и сохранит под нужным мне именем или это будет отдельная кнопка в документе, которая вызывает скрипт сохранения и которую пользователь должен будет нажать?
Т.е. меня в данный момент интересует общий вопрос.


Программа моя, написанная на с++. Она работает с экселем через КОМ, т.е. что-то типа:
Код: plaintext
1.
2.
        app.OlePropertyGet("WorkBooks").OleFunction("Add", ateamplate_file_name.c_str());
        f_current_sheet = app.OlePropertyGet("WorkSheets",1);


Но по идее, это не важно.

Файл экселя создаётся на основе шаблона, который я могу сделать как мне нужно.

Т.е. сейчас я хочу понять как мне делать, а делать я буду на следующей неделе.
Но в принципе, даже установка каталога сохранения уже жизнь упростит. Но хотелось бы и имя файла задать.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38151309
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_aluslbppb,

Про путь я понял, сейчас меня интересует имя файла.

Я должен написать скрипт, который при сохранении файла перехватит сохранение и сохранит под нужным мне именем или это будет отдельная кнопка в документе, которая вызывает скрипт сохранения и которую пользователь должен будет нажать?
Т.е. меня в данный момент интересует общий вопрос.


Программа моя, написанная на с++. Она работает с экселем через КОМ, т.е. что-то типа:
Код: plaintext
1.
2.
        app.OlePropertyGet("WorkBooks").OleFunction("Add", ateamplate_file_name.c_str());
        f_current_sheet = app.OlePropertyGet("WorkSheets",1);


Но по идее, это не важно.

Файл экселя создаётся на основе шаблона, который я могу сделать как мне нужно.

Т.е. сейчас я хочу понять как мне делать, а делать я буду на следующей неделе.
Но в принципе, даже установка каталога сохранения уже жизнь упростит. Но хотелось бы и имя файла задать.

Тогда проще всего при создании отчета создать в нем код и повесить его на событие before_save, который и будет перехватывать Save As. Там уже можно будет и имя файла и путь и вообще свое диалоговое окно, но это естесственно потребует разрешения на использование макросов.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38151322
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lbppbТогда проще всего при создании отчета создать в нем код и повесить его на событие before_save, который и будет перехватывать Save As. Там уже можно будет и имя файла и путь и вообще свое диалоговое окно, но это естесственно потребует разрешения на использование макросов.

Теперь понял. Сделать можно только с помощью макроса. Как вариант, перехватить событие before_save. Разрешение на использование скриптов будет.
Спасибо ещё раз!:)
Удачи ВАМ!
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38158282
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал скрипт обрабатывающий событие BeforeSave.

Всё работает так: Моя программа открывает шаблон, делает свои дела с ним, записывает в ячейку А1 на странице config__for__file_name требуемый полный путь к файлу.
При выборе пользователем "Сохранить", возникает событие BeforeSave и запускается мой скрипт, который открывает диалог "сохранить как", с именем файла, в который нужно сохранить данные.
Если данные сохранены, т.е. переменная Path не пуста, этот диалог не открывается.

Подскажите плс, я всё правильно сделал?


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
    On Error GoTo error_handle
  
    Application.EnableEvents = False
    
    If Path = "" Then
        
        Cancel = True
        EnteredFileName = Application.GetSaveAsFilename(ActiveWorkbook.Sheets("config__for__file_name").Range("A1").Formula, "*.xls, *.xls")
        
        If EnteredFileName <> False Then
            ActiveWorkbook.SaveAs FileName:=EnteredFileName, FileFormat:=xlWorkbookNormal
        End If
        
    End If
   
    Application.EnableEvents = True
    
Exit Sub

error_handle:

    MsgBox prompt:="&#206;&#248;&#232;&#225;&#234;&#224; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#255; &#244;&#224;&#233;&#235;&#224;: " & EnteredFileName, Buttons:=vbCritical
    Application.EnableEvents = True

End Sub
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38158284
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
max_alus MsgBox prompt:="Îøèáêà ñîõðàíåíèÿ ôàéëà: " & EnteredFileName, Buttons:=vbCritical
[/src]

Странно как-то вставилось. Там было написано "Ошибка сохранения файла" и выведено имя файла.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38159122
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_alus
Написал скрипт обрабатывающий событие BeforeSave.

Всё работает так: Моя программа открывает шаблон, делает свои дела с ним, записывает в ячейку А1 на странице config__for__file_name требуемый полный путь к файлу.
При выборе пользователем "Сохранить", возникает событие BeforeSave и запускается мой скрипт, который открывает диалог "сохранить как", с именем файла, в который нужно сохранить данные.
Если данные сохранены, т.е. переменная Path не пуста, этот диалог не открывается.


Подскажите плс, я всё правильно сделал?


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
    On Error GoTo error_handle
  
    Application.EnableEvents = False
    
    If Path = "" Then
        
        Cancel = True
        EnteredFileName = Application.GetSaveAsFilename(ActiveWorkbook.Sheets("config__for__file_name").Range("A1").Formula, "*.xls, *.xls")
        
        If EnteredFileName <> False Then
            ActiveWorkbook.SaveAs FileName:=EnteredFileName, FileFormat:=xlWorkbookNormal
        End If
        
    End If
   
    Application.EnableEvents = True
    
Exit Sub

error_handle:

    MsgBox prompt:="&#206;&#248;&#232;&#225;&#234;&#224; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#255; &#244;&#224;&#233;&#235;&#224;: " & EnteredFileName, Buttons:=vbCritical
    Application.EnableEvents = True

End Sub



Ну если все работает как и задумывалось, то правильно, а если нет, то соответственно нет.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38159348
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lbppbНу если все работает как и задумывалось, то правильно, а если нет, то соответственно нет.
Вопрос спорный:)

Оно может в одном случае работать, в другом нет.

Вот засаду увидел, что если по какой-либо причине будет глюк сохранением по .SaveAs, допустим не понравится расширение и т.п., то никак сохраниться не получится, т.к. из обработчика ошибок выход всегда с установкой "cancel".

Наверное, в обработчик ошибки, нужно добавить что-то типа "Хотите вызвать диалог сохранения по умолчанию?".
Но это нужно подумать. В основном всё работает.
Вылезало сообщение про "не могу сохранить файл с макросом в книге без макросов" пришлось поменять тип файлов на xlsm, ещё вылезало "пересчёт формул в новой версии книги" пришлось перейти на формат новой версии.
Но в целом всё работает именно как хотелось. Жаль, что это именно макросом делается.

В принципе, я вычитал, что имя файла по умолчанию берётся из Workbook.Name, т.е. теоретически, можно было бы это нэйм менять, и устанавливать имя каталога, как вы предложили.
Но мне не понравилось, что при этом меняется имя каталога по умолчанию для всех файлов экселя.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38159650
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_alus,

Ну это уже все отладка. Глюки почти всегда вылезают, все зависит от степени тестирования.

Если я правильно помню из справки, то предложенным мною способом имя каталога меняется для данного Excel приложения на данную сессию. На счет Workbook.Name, очень хотелось бы верить.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38159778
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lbppbmax_alus,

Ну это уже все отладка. Глюки почти всегда вылезают, все зависит от степени тестирования.

Если я правильно помню из справки, то предложенным мною способом имя каталога меняется для данного Excel приложения на данную сессию. На счет Workbook.Name, очень хотелось бы верить.

Ну если на данную сессию, то это хорошо:) Но у меня получилось, что поменялось вообще. Хотя сейчас уже думаю, "А вдруг я ошибаюсь", т.к. конечно лучше обойтись без макроса...)

Попробую на днях.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38159827
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал...
1. DefaultFilePath - сохраняется не только в этой сесии, а вообще для всех документов.
2. Name - r/o)

Вот...)
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38159977
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_alusПопробовал...
1. DefaultFilePath - сохраняется не только в этой сесии, а вообще для всех документов.
2. Name - r/o)

Вот...)

Печально. Тогда лучшее, что могу предложить:
Код: vbnet
1.
xlApp.GetSaveAsFilename InitialFileName:="C:\temp\"


Но пользователю придется каждый раз отказываться от сохранения. Либо возиться с WinAPI, чтобы выловить открытие окна...
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38160595
max_alus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так и сделано в макросе, по сути вопрос решён.

Но вот бы отказаться от макроса...) Макрос не сильно мешает, просто дополнительные действия в случае обновления и нестандартное поведение приложения, т.е. как бы не не совсем "прозрачно").


Есть мысль для всех отчётов (а их много), положить этот макрос в отдельную книгу с макросами а в шаблонах отчётов просто прописать вызов этого макроса.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38161140
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_alusТак и сделано в макросе, по сути вопрос решён.

Я как раз без макроса предлагаю. Событие сохранения вызывается при создании отчета, а потом WinAPI вылавливает открытие окна и не показывая его, нажимает Esc. Если вы в C++ пишете, то это не должно быть так уж сложно.

max_alusЕсть мысль для всех отчётов (а их много), положить этот макрос в отдельную книгу с макросами а в шаблонах отчётов просто прописать вызов этого макроса.

Тогда уж лучше add-in.
...
Рейтинг: 0 / 0
Excel установка имени файла без сохранеия самого файла
    #38161275
макс_гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lbppbЯ как раз без макроса предлагаю. Событие сохранения вызывается при создании отчета, а потом WinAPI вылавливает открытие окна и не показывая его, нажимает Esc. Если вы в C++ пишете, то это не должно быть так уж сложно.

Я могу сразу сохранить файл с заданным именем через ОЛЕ, но нужно, чтобы сохранялось только когда пользователь нажал "сохранить". И я не понял как можно обойтись тут без макроса.
Проблем с отловом окна нет, но я не понял самой идеи:(
Вообще, чтобы там ни было, ловить открытие окна мне не хотелось бы, т.к. это всё же несколько узкое решение. Хотя, конечно я вопрос не изучал.


lbppbчше add-in.
Не знал, что такое бывает. Изучу вопрос. Пасип)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel установка имени файла без сохранеия самого файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]