Frage

Wie kann eine I Garantie, dass keine Pop-up-Dialoge angezeigt, wenn ich Microsoft Excel durch OLE-Automatisierung? Ich bin mit einer Perl-Modul (Win32 :: OLE). Ich kann die meisten Dialog Pop-ups mit dem folgenden Code vermeiden:

use Win32::OLE;
use Win32::OLE::Variant;
use Win32::OLE::Const;

my $excel_symbols = Win32::OLE::Const->Load('Microsoft Excel');
my $excel = Win32::OLE->new('Excel.Application', sub { $_[0]->Quit();} );
$excel->{'Visible'} = 0;
$excel->{'DisplayAlerts'} = 0;
$excel->Workbooks->Open('c:\some_excel_file.xls',
  { 'UpdateLinks' => $excel_symbols->{'xlUpdateLinksNever'},
    'ReadOnly' => 1,
    'IgnoreReadOnlyRecommended' => 1
  });

Doch für einige Dateien, ich weiterhin einen Dialog mit dem folgenden Text bekommen:

  

Diese Datei ist keine erkennbare   Format.

     
      
  • Wenn Sie wissen, dass die Datei von einem anderen Programm, das mit nicht kompatibel ist   Microsoft Excel, klicken Sie auf Abbrechen, dann   Öffnen Sie diese Datei in seiner ursprünglichen   Anwendung. Wenn Sie wollen, dass die öffnen   Datei später in Microsoft Excel, speichern   in einem Format, das kompatibel ist, wie beispiel   als Textformat an.
  •   
  • Wenn Sie die Datei vermuten beschädigt ist, klicken Sie auf Hilfe, um weitere Informationen zu   Lösung des Problems.
  •   
  • Wenn Sie immer noch sehen wollen, welcher Text in der Datei enthalten ist, Klicken Sie auf OK.   Dann klicken Sie auf Fertig in dem Textimport   Wizard.
  •   
     

OK Abbrechen

Manchmal ist ein ähnliches Dialogfeld erscheint, dass enthält ‚OK‘, ‚Abbrechen‘ und ‚Hilfe‘ Tasten.

Ich kann die Qualität der Dateien steuern, die zu den Skripten zur Verfügung gestellt werden.

War es hilfreich?

Lösung 2

ich dieses Problem revisited und fand eine Lösung.

Kopieren Sie die Datei vor der Verarbeitung in einem temporären Speicherort. Dann speichern Sie die Datei, bevor es in Excel endet:

File::Copy::copy('c:\some_excel_file.xls', 'c:\temp\SFO3jfd.xls');
my $book = $excel->Workbooks->Open('c:\temp\SFO3jfd.xls',
  { 'UpdateLinks' => $excel_symbols->{'xlUpdateLinksNever'},
    'ReadOnly' => 1,
    'IgnoreReadOnlyRecommended' => 1
  });
$book->Save();
$book->Close();

Warum dies funktioniert:

Excel 2003 neu berechnet automatisch die Formeln in Dokumenten, die in einer älteren Version von Excel erstellt wurden. Darüber hinaus könnten Makros aufgerufen werden, wenn das Dokument geöffnet wird. All dies bedeutet, dass es Änderungen an einem Dokument vorgenommen werden könnte, auch wenn Ihr Skript keine solche Operationen nicht durchführen.

das Dokument Durch das Speichern vor dem Schließen, vermeiden Sie den Dialog fordern, dass Sie die Datei speichern. eine temporäre Datei wird sichergestellt, dass die ursprüngliche Datei erhält nicht während des Validierungsvorganges geändert. Wenn Sie nicht über diese betroffen sind, könnten Sie an Ort und Stelle zu validieren.

Andere Tipps

Sie könnte in Erwägung ziehen mit Kalkulationstabelle :: ParseExcel (wenn auch kann es Funktionen fehlen Sie benötigen) oder Apache POI (wenn auch es etwas Verpackung benötigen zu verwenden, in ein Perl-Skript), statt das Excel-Engine über OLE aufzurufen. Auf diese Weise können keine Excel-generierten Dialoge bekommen.

Hier ist eine vollständige Dokumentation für Open Methode. Ich frage mich, ob CorruptLoad Parameter ist, was Sie brauchen.

Wenn Sie derzeit alle xl Dateien im Baum versuchen, können einige von ihnen von anderen Benutzern geöffnet sein und den ~ Präfix.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top