Předvánoční slevová akce Java týden
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!
Avatar
Martin Krejčí:27. března 18:36

Zdravím,
vytvořil jsem (i s pomocí lidí odtud) jednoduchou aplikaci, která slouží jako jakýsi launcher pro můj Excel sešit s makry. Launcher kontroluje přítomnost Office, usnadňuje mi distribuci a taky to vypadá líp. Problém je, že to není moc dobře navržené z pohledu výkonu. Napdá vás, co kde zlepšit? (Já vím akorát, že Office Interops jsou sami o sobě pomalé.) Když bude mít někdo tu trpělivost se na to podívat, budu moc rád :-) .

Imports System.Threading
Imports Microsoft.Win32
Imports Microsoft.Office.Interop.Excel

Module Module1
    Public Sub Main()
        On Error GoTo ErrorHandler
        Dim singleInstance As Boolean = False
        Dim mutex As New Mutex(True, My.Application.Info.AssemblyName, singleInstance)
        Dim excelKey As RegistryKey = Registry.ClassesRoot.OpenSubKey("Excel.Application")
        Dim excelInstalled As Boolean = If(excelKey Is Nothing, False, True)
        If excelInstalled = True And singleInstance = True Then
            SplashForm.Show()
            Dim MyAppPath As String = My.Application.Info.DirectoryPath
            Dim ExcelFilePath As String = IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.MyDocuments, "Správce rozpisů 2019\" & "Rozpis1.xlsb")

            If Not IO.File.Exists(ExcelFilePath) Then
                Dim ExcelfileBackupPath As String = IO.Path.Combine(MyAppPath, "bundle\backup\" & "Rozpis1.xlsb")
                If IO.File.Exists(ExcelfileBackupPath) Then
                    My.Computer.FileSystem.CopyFile(ExcelfileBackupPath, ExcelFilePath, True)
                    Call Open(ExcelFilePath)
                Else
                    SplashForm.Close()
                    ErrorForm.ShowDialog()
                    End
                End If
            Else
                Call Open(ExcelFilePath)
            End If
            SplashForm.Close()
        ElseIf excelInstalled = False Then
            SplashForm.Close()
            CompatibilityErrorForm.ShowDialog()
        ElseIf singleInstance = False Then
            MsgBox("Správce rozpisů je již spuštěn.", vbInformation, "Aplikace je již spuštěna")
        End If
        Exit Sub
ErrorHandler:
        MsgBox("Při spouštění Správce rozpisů došlo k chybě.", vbCritical, "Došlo k chybě")
        Resume Next
    End Sub

    Sub Open(openThis As String)
        Dim xls As Application = New Application With {
            .WindowState = XlWindowState.xlMaximized
        }
        Dim workbook As Workbook = xls.Workbooks.Open(openThis)
        xls.Visible = True
    End Sub
End Module

Zkusil jsem:

  • Snažil jsem se kód zjednodušit, ale nemám moc zkušeností (tj. žádné :-) ).
  • Chtěl jsem přidat animovaný gif načítání abych uživatele trochu "zabavil", ale animace není plynulá (pokud vůbec) - zřejmě to bude tím, že používám WinForms (WPF bohužel ještě neumím)

Chci docílit: Rád bych dosáhl otevření okna Excelu co nejdříve (teď to od kliknutí na ikonu laucheru do načtení Excelu trvá cca 30 vteřin - hrůza), nebo alespoň vytvořil dojem, že to netrvá "tak strašně dlouho".

Editováno 27. března 18:38
 
Odpovědět
27. března 18:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.