Функция _ExcelBookSaveAs

         Описание функции


_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 и т.д.",
"по умолчанию" используется формат "xlsx"
В базовой UDF "Excel.au3" использование в этой функции таких форматов не предусмотрено,
это можно исправить модифицированием "Excel.au3";
Инструкции и внедряемый код переведены на этой странице (см.Пример 3)

См. также

_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!!!