Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
ВнизСкрыть Excel Найти похожие ветки
← →
Ega23 © (2007-12-26 13:39) [0]uses Excel2000;
Задача: тихо просмотреть у некоего Excel-файла (или группы файлов) некоторые атрибуты.
Проблема: если на файле стоит пароль на открытие, то запускается оболочка Excel, возникает окошко для ввода пароля, и открытие происходит только после введения пароля, что не нужно.
Собственно вопрос: можно ли узнать TExcelWorkbook.HasPassword без запуска оболочки Excel?
← →
clickmaker © (2007-12-26 13:45) [1]
> Ega23 © (26.12.07 13:39)
так пока Visible не поставишь, он же и не покажется, разве нет?
← →
Ega23 © (2007-12-26 13:51) [2]
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:57) [3]TWorkbook.Unprotect?
← →
Ega23 © (2007-12-26 14:08) [4]
> TWorkbook.Unprotect?
А чем это поможет? Речь не о методе Protect/Unprotect, речь о пароле на файл (Файл - Сохранить как - Сервис - Общие Параметры - Пароль для открытия файла)
Вот мне, грубо говоря, нужно узнать - запаролен ли данный файл, или нет.
← →
clickmaker © (2007-12-26 14:12) [5]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:13) [6]Так не известен пароль-то. :)
Если документ запаролен - так и отписать "Данный документ запаролен на открытие"
Если нет - начать собирать атрибуты дальше.
← →
clickmaker © (2007-12-26 14:21) [7]
> [6] Ega23 © (26.12.07 14:13)
а, всё, понял.
Прибить запрос пароля, короче.
Application.Interactive := False
Application.DisplayAlerts := False
не помогут?
← →
Ega23 © (2007-12-26 14:27) [8]
> не помогут?
Не помогают...
Блин, неужели всё-таки по смещению искать придётся???
← →
clickmaker © (2007-12-26 14:48) [9]как вариант. Можно еще код 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:50) [10]
> как вариант. Можно еще код Exception проверять, на то, что
> это именно неверный пароль, а не ошибка открытия файла
А если это именно ошибка открытия файла? :)
← →
Ega23 © (2007-12-26 14:51) [11]Короче, эти exception-ы (Ошибка открытия и Неверный пароль) как-то различить можно?
← →
clickmaker © (2007-12-26 14:57) [12]хм... ErrorCode у них один. Разве что по Message, учитывая язык )
← →
Ega23 © (2007-12-26 14:58) [13]
> хм... ErrorCode у них один. Разве что по Message, учитывая
> язык )
Мрачно.
А насколько корректно по структуре файла искать? Ведь, насколько я понимаю, сильно от формата файла будет зависеть. Точнее, от версии Excel
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c