Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.27;
Скачать: CL | DM;

Вниз

Скрыть 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
15-1197987450
ПЛОВ
2007-12-18 17:17
2008.01.27
Учет техники на предприятии (в електронном виде)


2-1198928612
savyhinst
2007-12-29 14:43
2008.01.27
OGG


11-1182473548
SPeller_work
2007-06-22 04:52
2008.01.27
KOLFlash


2-1198754067
Looser
2007-12-27 14:14
2008.01.27
Событие при нажатии Esc


1-1192971907
Dimmitt
2007-10-21 17:05
2008.01.27
Синхронная прокрутка двух Memo