Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.48 MB
Время: 0.034 c
15-1197976254
niKo
2007-12-18 14:10
2008.01.27
только не предлагайте проверить


2-1199179929
palva
2008-01-01 12:32
2008.01.27
Не открывается TADODataSet


2-1199268328
Max.66RUS
2008-01-02 13:05
2008.01.27
Самоудаление программы по нажатию на кнопку...


2-1197404563
Rustam
2007-12-11 23:22
2008.01.27
пинг


2-1198750703
Dash Rendar
2007-12-27 13:18
2008.01.27
Drag n Drop между страницами PageControl





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский