![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скрыть Excel [D7]
Ega23 © (2007-12-26 13:39:00)uses Excel2000;
Задача: тихо просмотреть у некоего Excel-файла (или группы файлов) некоторые атрибуты.
Проблема: если на файле стоит пароль на открытие, то запускается оболочка Excel, возникает окошко для ввода пароля, и открытие происходит только после введения пароля, что не нужно.
Собственно вопрос: можно ли узнать TExcelWorkbook.HasPassword без запуска оболочки Excel?
Ega23 (2007-12-26 14:58:00) [1]
> хм... ErrorCode у них один. Разве что по Message, учитывая
> язык )
Мрачно.
А насколько корректно по структуре файла искать? Ведь, насколько я понимаю, сильно от формата файла будет зависеть. Точнее, от версии Excel
clickmaker (2007-12-26 14:57:00) [2]хм... ErrorCode у них один. Разве что по Message, учитывая язык )
Ega23 (2007-12-26 14:51:00) [3]Короче, эти exception-ы (Ошибка открытия и Неверный пароль) как-то различить можно?
Ega23 (2007-12-26 14:50:00) [4]
> как вариант. Можно еще код Exception проверять, на то, что
> это именно неверный пароль, а не ошибка открытия файла
А если это именно ошибка открытия файла? :)
clickmaker (2007-12-26 14:48:00) [5]как вариант. Можно еще код Exception проверять, на то, что это именно неверный пароль, а не ошибка открытия файла
try
XLApp.Workbooks.Open(OpenDlg.FileName, EmptyParam, EmptyParam,
EmptyParam, '***', EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, LCID);
except
Memo1.Lines.Add('Has password');
Exit;
end;
Ega23 (2007-12-26 14:27:00) [6]
> не помогут?
Не помогают...
Блин, неужели всё-таки по смещению искать придётся???
clickmaker (2007-12-26 14:21:00) [7]
> [6] Ega23 © (26.12.07 14:13)
а, всё, понял.
Прибить запрос пароля, короче.
Application.Interactive := False
Application.DisplayAlerts := False
не помогут?
Ega23 (2007-12-26 14:13:00) [8]Так не известен пароль-то. :)
Если документ запаролен - так и отписать "Данный документ запаролен на открытие"
Если нет - начать собирать атрибуты дальше.
clickmaker (2007-12-26 14:12:00) [9]function Open(const Filename: WideString; UpdateLinks: OleVariant; ReadOnly: OleVariant;
Format: OleVariant; Password: OleVariant; WriteResPassword: OleVariant;
IgnoreReadOnlyRecommended: OleVariant; Origin: OleVariant; Delimiter: OleVariant;
Editable: OleVariant; Notify: OleVariant; Converter: OleVariant;
AddToMru: OleVariant; lcid: Integer): ExcelWorkbook; safecall;
не оно?
Ega23 (2007-12-26 14:08:00) [10]
> TWorkbook.Unprotect?
А чем это поможет? Речь не о методе Protect/Unprotect, речь о пароле на файл (Файл - Сохранить как - Сервис - Общие Параметры - Пароль для открытия файла)
Вот мне, грубо говоря, нужно узнать - запаролен ли данный файл, или нет.
clickmaker (2007-12-26 13:57:00) [11]TWorkbook.Unprotect?
Ega23 (2007-12-26 13:51:00) [12]
procedure TFMain.Button1Click(Sender: TObject);
var
XLApp: TExcelApplication;
WB: TExcelWorkbook;
ss :string;
const LCID = LOCALE_USER_DEFAULT;
begin
if not OpenDlg.Execute then Exit;
XLApp := TExcelApplication.Create(nil);
WB := TExcelWorkbook.Create(nil);
try
WB.ConnectTo(XLApp.Workbooks.Add(OpenDlg.FileName, LCID));
if WB.HasPassword[LCID] then
ss := 'HasPassword'
else
ss := 'not HasPassword';
Memo1.Lines.Add(ss);
finally
XLapp.Quit;
WB.Free;
XLapp.Free;
end;
end;
если пароля нет - всё ОК
если есть -
На WB.ConnectTo - открывается Excel, появляется окно ввода пароля. После введения - всё ОК.
clickmaker (2007-12-26 13:45:00) [13]
> Ega23 © (26.12.07 13:39)
так пока Visible не поставишь, он же и не покажется, разве нет?