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

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


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

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

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


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

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


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

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

я имею ввиду, что при нажатии на "Сохранить" выполнится макрос, который сохранит, или макрос повесить на какое-либо события типа OnSave (если конечно такое там это возможно), который выполнится при возникновении этого события?
...
Рейтинг: 0 / 0
14.02.2013, 13:36
    #38151131
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
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
14.02.2013, 14:13
    #38151232
max_alus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
Спасибо огромное!
Есть непонятный момент - кто должен скрипт запускать? Пользователь или он запустится автоматом при каком-то событии?
В данный момент не могу проверить ничего, смогу только завтра. Возможно, проблемы сразу уйдут.


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
14.02.2013, 14:20
    #38151258
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
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
14.02.2013, 14:31
    #38151288
max_alus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
lbppb,

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

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


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


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

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

Т.е. сейчас я хочу понять как мне делать, а делать я буду на следующей неделе.
Но в принципе, даже установка каталога сохранения уже жизнь упростит. Но хотелось бы и имя файла задать.
...
Рейтинг: 0 / 0
14.02.2013, 14:40
    #38151309
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
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
14.02.2013, 14:45
    #38151322
max_alus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
lbppbТогда проще всего при создании отчета создать в нем код и повесить его на событие before_save, который и будет перехватывать Save As. Там уже можно будет и имя файла и путь и вообще свое диалоговое окно, но это естесственно потребует разрешения на использование макросов.

Теперь понял. Сделать можно только с помощью макроса. Как вариант, перехватить событие before_save. Разрешение на использование скриптов будет.
Спасибо ещё раз!:)
Удачи ВАМ!
...
Рейтинг: 0 / 0
20.02.2013, 02:19
    #38158282
max_alus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
Написал скрипт обрабатывающий событие 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
20.02.2013, 02:23
    #38158284
max_alus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
max_alus MsgBox prompt:="Îøèáêà ñîõðàíåíèÿ ôàéëà: " & EnteredFileName, Buttons:=vbCritical
[/src]

Странно как-то вставилось. Там было написано "Ошибка сохранения файла" и выведено имя файла.
...
Рейтинг: 0 / 0
20.02.2013, 15:09
    #38159122
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
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
20.02.2013, 16:36
    #38159348
max_alus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel установка имени файла без сохранеия самого файла
lbppbНу если все работает как и задумывалось, то правильно, а если нет, то соответственно нет.
Вопрос спорный:)

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

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

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

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

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

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

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

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

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

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

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

Вот...)

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


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

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


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

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

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

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

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


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


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