Ich möchte in einem gegebenen Verzeichnis alle Excel-Dateien nach Hyperlinks durchsuchen und alle Links in einer Datei auflisten.
Auf dem Entwicklungssystem (Windows 7 64Bit, Visual Studio 2008, Office 2007) läuft das Program ohne Fehler.
Auf dem Zielrechner (Windows XP, Office 2000) kommt folgender Fehler:
"Could not load file or assembly 'Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture...."
Also habe ich den Verweis auf "Microsoft.Office.Interop.Excel" in VS 2008 in den Eigenschaften des Projekts auf "Lokale Kopie = True" gesetzt und nehme die resultierende DLL auf den Zielrechner mit.
Das Program startet, bricht aber beim Öffnen der ersten Excel Datei:
-> Excel1.Workbooks.Open(Filename:=FileArray.Item(i). ToString, ReadOnly:=True)
mit der Fehlermeldung "Object Reference not set to an instance of an object" ab.
Der Stringarray "FileArray" beinhaltet nach dem Aufruf der Funktion "FSearch.Search" eine Liste aller Excel-Dateien.
Hier der Code:
Meine Frage:
1.) Ist die Vorgehensweise (DLL kopieren) überhaupt richtig?
oder
2.) Wie bekomme ich das Program auf dem Zielrechner zum rennen?
Auf dem Entwicklungssystem (Windows 7 64Bit, Visual Studio 2008, Office 2007) läuft das Program ohne Fehler.
Auf dem Zielrechner (Windows XP, Office 2000) kommt folgender Fehler:
"Could not load file or assembly 'Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture...."
Also habe ich den Verweis auf "Microsoft.Office.Interop.Excel" in VS 2008 in den Eigenschaften des Projekts auf "Lokale Kopie = True" gesetzt und nehme die resultierende DLL auf den Zielrechner mit.
Das Program startet, bricht aber beim Öffnen der ersten Excel Datei:
-> Excel1.Workbooks.Open(Filename:=FileArray.Item(i). ToString, ReadOnly:=True)
mit der Fehlermeldung "Object Reference not set to an instance of an object" ab.
Der Stringarray "FileArray" beinhaltet nach dem Aufruf der Funktion "FSearch.Search" eine Liste aller Excel-Dateien.
Hier der Code:
Code:
Private Sub bt_SearchHyperlinks_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_SearchHyperlinks.Click Dim FSearch As New FileSearch Dim Filter As New FileSearch.SearchFilter Dim FileArray As New List(Of String) Dim RowNR As Integer = 0 lb_Status1.Text = "läuft" tb_Zeile1.Text = 0 Dim SW_Excel_Output, SW_ErrExcel_Output As StreamWriter Dim Err_No As Integer = 0 Dim OutEXcelFile As String = tb_Ziel.Text + "\HYPERLINKS_in_EXCEL.txt" Dim OutErrFile As String = tb_Ziel.Text + "\ErrorOutput_EXCEL.txt" Dim fs_EXcel As FileStream = New FileStream(OutEXcelFile, FileMode.Create, FileAccess.Write) Dim fs_ErrEXcel As FileStream = New FileStream(OutErrFile, FileMode.Create, FileAccess.Write) SW_Excel_Output = New StreamWriter(fs_EXcel) SW_ErrExcel_Output = New StreamWriter(fs_ErrEXcel) SW_Excel_Output.WriteLine("DATEINAME, PFAD, HYPERLINKNAME, HYPERLINKADRESSE") With Filter .Listing = FileSearch.SearchFilter.LO.FILES_ONLY .FileTypes = "xls,xlsx" .SizeType = FileSearch.SearchFilter.ST.BYTES End With FSearch.Search(tb_FindFolder1.Text, "", Filter, FileArray) Dim fzeile As String For i = 0 To FileArray.Count - 1 Dim Excel1 As New Microsoft.Office.Interop.Excel.Application Try Excel1.Workbooks.Open(Filename:=FileArray.Item(i).ToString, ReadOnly:=True) For Each WB_Sheet In Excel1.Sheets For Each hyp In WB_Sheet.hyperlinks fzeile = FileArray(i).ToString.Substring(FileArray(i).ToString.LastIndexOf("\"c) + 1) & ", " & _ FileArray(i).ToString.Substring(0, FileArray(i).ToString.LastIndexOf("\"c)) & ", " & _ hyp.Name & ", " & hyp.Address ' MessageBox.Show(fzeile, "EXCEL Suche", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, 0, 0) SW_Excel_Output.WriteLine(fzeile) RowNR = RowNR + 1 If RowNR Mod 5 = 0 Then tb_Zeile1.Text = RowNR End If Next Next Catch ex As Exception Err_No = Err_No + 1 Dim EText As String = "FEHLER: " & ex.Message ' MessageBox.Show(EText, "EXCEL Suche", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, 0, 0) SW_ErrExcel_Output.WriteLine(EText & "(" & FileArray.Item(i).ToString & ")") Finally Excel1.ActiveWorkbook.Close(False) Excel1.Workbooks.Close() Excel1.Quit() Kill_Obj(Excel1) GC.Collect() End Try Next SW_Excel_Output.Close() fs_EXcel.Close() SW_ErrExcel_Output.Close() fs_ErrEXcel.Close() tb_Zeile1.Text = RowNR tb_Fehler1.Text = Err_No lb_Status1.Text = "steht" bt_SearchHyperlinks.Enabled = False End Sub
1.) Ist die Vorgehensweise (DLL kopieren) überhaupt richtig?
oder
2.) Wie bekomme ich das Program auf dem Zielrechner zum rennen?
Comment