_ExcelBookSaveAs
Сохраняет рабочую книгу Excel под новым именем/расположением или типом (инициализация "Сохранить как")
Внимание!!! пересохранение книги без изменения каких либо параметров необходимо выполнять при помощи _ExcelBookSave
использование этой функции в таком случае вызовет ошибку.
#include <Excel.au3>
_ExcelBookSaveAs($oExcel, $sFilePath [, $sType = "xls" [, $fAlerts = 0 [, $fOverWrite = 0 [, $sPassword = "" [, $sWritePassword = "" [, $iAccessMode = 1 [, $iConflictResolution = 2]]]]]]])
Параметры
$oExcel | Ссылка на COM-объект "Excel.Application" полученная ранее вызванными _ExcelBookOpen(), _ExcelBookNew(), или _ExcelBookAttach() |
$sFilePath |
Путь + имя сохраняемого файла (н/п C:\Docunents\myworkbook) Внимание!!! имя указывается без расширения, расширение сохраняемого файла определяется параметром $sType |
$sType |
[необязательный] Формат сохраняемого файла предусмотренный версией Excel = "xls|csv|txt|template|html", по умолчанию "xls" Внимание!!! см.Примечание |
$fAlerts |
[необязательный] Флаг определяющий наличие оповещений/запросов Excel (0=отключены, 1=включены) (по умолчанию = 0) |
$fOverWrite |
[необязательный] Флаг определяющий состояние перезаписи, если указанный файл уже существует (0=не перезаписывать,1=перезаписывать) |
$sPassword |
[необязательный] Пароль к защищенной паролем книге Excel (по умолчанию = "") |
$sWritePassword |
[необязательный] Пароль защиты от редактирования в рабочей книге (по умолчанию="") |
$iAccessMode |
[необязательный] Признак совместного использования у рабочей книги (sharing), для определения этого параметра используются следующие константы: $xlNoChange - Принять значение исходного файла (по умолчанию) (числовой эквивалент = 1) $xlExclusive - Отключает признак совместного использования у рабочей книги (числовой эквивалент = 3) $xlShared - Включает признак совместного использования у рабочей книги (числовой эквивалент = 2) |
$iConflictResolution |
[необязательный] Для документов с признаком совместного использования, определяет как разрешать конфликты совместного использования, для определения этого параметра используются следующие константы: $xlUserResolution - Вызывать диалоговое окно для выбора условий разрешения конфликта пользователем (числовое значение = 1) $xlLocalSessionChanges - Изменения локального пользователя(владельца) всегда принимаются (по умолчанию) (числовое значение = 2) $xlOtherSessionChanges - Изменения локального пользователя(владельца) всегда отклоняются (числовое значение = 3) |
Возвращаемое значение
Успех: | Возвращает 1 |
Ошибка: | Возвращает 0, Устанавливает значение флага ошибки @error: |
@error: | 0 - Скрипт завершил работу без ошибок |
1 - Ошибка OLE/COM ($oExcel), возможно указанный объект не существует | |
2 - Не верно указан тип файла ($sType) | |
3 - Файл открыт только для чтения |
Примечания
В MS Office 2007-2010 доступен более расширенный список форматов "xlsx|xlsb|xlsm и т.д.",См. также
_ExcelBookSaveПример
; ***********************************************
; Пример 1 - Сохранение рабочей книги под другим именем, без каких либо оповещений Excel
; ***********************************************
#include <Excel.au3>
$oExcel = _ExcelBookNew(1) ; Создаем новую рабочую книгу Excel
_ExcelBookSaveAs($oExcel, @TempDir & "\SaveAsExample", "xls", 0, 1) ; Сохраняем книгу в директории временных файлов с именем "SaveAsExample.xls", при необходимости перезаписывая, без оповещений
_ExcelBookClose($oExcel)
If Not @error Then MsgBox(4096, "_ExcelBookSaveAs | Пример 1", "Файл успешно сохранен!", 3)
_ExcelBookClose($oExcel, 1, 0) ; Этот метод при указанных параметрах закрывает рабочую книгу сохраняя изменения без каких либо оповещений Excel
; **********************************************
; Пример 2 - Перезапись файла установлением пароля: "Password", Открытие книги для проверки защиты
; **********************************************
#include <Excel.au3>
$oExcel = _ExcelBookNew(1) ; Создаем новую рабочую книгу Excel
_ExcelBookSaveAs($oExcel, @TempDir & "\SaveAsExample", "xls", 0, 1, "Password") ; Сохраняем книгу в директории временных файлов с именем "SaveAsExample.xls", при необходимости перезаписывая, без оповещений, защищая паролем "Password"
_ExcelBookClose($oExcel)
If Not @error Then MsgBox(4096, "_ExcelBookSaveAs | Пример 2", "Файл успешно сохранен!")
_ExcelBookClose($oExcel, 1, 0) ; Этот метод при указанных параметрах закрывает рабочую книгу сохраняя изменения без каких либо оповещений Excel
If Not @error Then MsgBox(4096, "_ExcelBookSaveAs | Пример 2", "Попытаемся открыть сохраненную книгу для того чтобы проверить созданный пароль")
$oExcel = _ExcelBookOpen(@TempDir & "\SaveAsExample.xls", 1, False) ; Открывает сохраненную книгу для проверки защиты паролем
;*************************************************************************************************
;Пример 3 - Модификация Excel.au3, для использования в методе _ExcelBookSaveAs форматов MS Office Excel 2007-2010
;*************************************************************************************************
;В данном коде описываются лишь некоторые из форматов доступных для сохранения рабочей книги в MS Office Excel 2007-2010
;Все остальные форматы вы можете описать по аналогии, для этого посетите MSDN в разделе Visual Basic for Applications
;найдите описания констант форматов и их числовые эквиваленты ( "http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlfileformat.aspx" )
;после чего добавьте константы с соответствующими числовыми значениями в Excel.au3, и используйте их в этом коде по аналогии
;Откройте Excel.au3, к описанию констант добавьте
Global Const $xlExcel12 = 50 ; расширение xlsb (Excel Binary Workbook in 2007-2010 with or without macro's)
Global Const $xlOpenXMLWorkbook = 51 ; расширение xlsx (xlOpenXMLWorkbook without macro's in 2007-2010)
Global Const $xlOpenXMLWorkbookMacroEnabled = 52 ; расширение xlsm (xlOpenXMLWorkbookMacroEnabled with or without macro's in 2007-2010)
Global Const $xlExcel8 = 56 ;расширение xls (xlExcel8 97-2003 format in Excel 2007-2010)
;перейдите на строку № 339 и замените блок IF - Else - EndIf следующим кодом
If $sType = "xls" Or $sType = "csv" Or $sType = "txt" Or $sType = "template" Or $sType = "html" Or $sType = "xlsb" Or $sType = "xlsx" Or $sType = "xlsm" then
If $sType = "xls" Then $sType = $xlExcel8
If $sType = "csv" Then $sType = $xlCSVMSDOS
If $sType = "txt" Then $sType = $xlTextWindows
If $sType = "template" Then $sType = $xlTemplate
If $sType = "html" Then $sType = $xlHtml
If $sType = "xlsx" Then $sType = $xlOpenXMLWorkbook
If $sType = "xlsm" Then $sType = $xlOpenXMLWorkbookMacroEnabled
If $sType = "xlsb" Then $sType = $xlExcel12
Else
Return SetError(2, 0, 0)
EndIf
;SciTE Script Editor может не дать вам перезаписать оригинальный Excel.au3, => сохраните его как Excel1.au3 а впоследствии
;удалите Excel.au3 через проводник , а Excel1.au3 переименуйте в Excel.au3, или импортируйте UDF как есть #include <Excel1.au3>
;Не используйте эти модификации если вы не используете MS Office Excel 2007-2010!!!