spsman
Goto Top

Welche Programmiersprache: Exceldatei schnell bearbeiten

Hi,

ich habe eine Excel Datei mit mehreren Formeln etc.
Jetzt möchte ein Programm schreiben das den Header (maximal: 50 Spalten x3 Zeile) auslesen. Dem User eine GUI anzeigt, mit einem Textfeld neben jedem Header und die Einträge zurück in die Tabelle schreibt.

Das ganz habe ich schon im Powershell, allerdings dauert alleine das auslesen der Header schon 1,8 Sekunden.

Hab ihr einen Tipp in welcher Programmiersprache es am schnellsten geht xlsx Dateien zu bearbeiten?


Hinweis: Der Entwicklung /Lern- Zeitaufwand ist Irrelewand. da ich es privat mache ;)

Content-ID: 6486624317

Url: https://administrator.de/contentid/6486624317

Ausgedruckt am: 19.11.2024 um 01:11 Uhr

Kraemer
Lösung Kraemer 24.03.2023 um 09:57:44 Uhr
Goto Top
Moin,

es ist mal wieder Freitag.

Das, was da wahrscheinlich so "lange" dauert, ist das "entpacken" der xlsx. Ich sehe da keine Möglichkeit das irgendwie wesentlich zu beschleunigen.

Gruß
6247018886
6247018886 24.03.2023 um 10:47:33 Uhr
Goto Top
Kraemer
Kraemer 24.03.2023 um 11:08:28 Uhr
Goto Top
Zitat von @6247018886:

Import-Excel Module für Powershell
https://www.powershellgallery.com/packages/ImportExcel/7.8.4

würde aufgrund seines Eingangsposts darauf wetten, dass er das schon nutzt... face-wink
6247018886
6247018886 24.03.2023 aktualisiert um 11:12:27 Uhr
Goto Top
Zitat von @Kraemer:
würde aufgrund seines Eingangsposts darauf wetten, dass er das schon nutzt... face-wink
Könnte ja auch sein das er das noch über das COM-Object macht, ...
Wetten, und Raten scheint hier ja wohl daily bread gerade Freitags ... face-big-smile.
Kraemer
Kraemer 24.03.2023 um 11:12:29 Uhr
Goto Top
Zitat von @6247018886:

Zitat von @Kraemer:
würde aufgrund seines Eingangsposts darauf wetten, dass er das schon nutzt... face-wink
Könnte ja auch sein das er das noch über das COM-Object macht ...
Wetten, und Raten ist hier ja daily bread gerade Freitags ... face-big-smile.

shit - hast Recht - an diese ekelige Möglichkeit hatte ich gar nicht mehr gedacht. Ist halt Freitag
Crusher79
Crusher79 24.03.2023 um 13:37:19 Uhr
Goto Top
Hallo,

schnell ... naja Quick and Dirty?

Excel ist keine DB. Weg damit und mit GUI + SQL arbeiten?

Anosnten C#. Wahlweise aus PowerShell heraus. Oder mit VBA etwas bauen. Was willst du hören?

https://www.magicsoftware.com/de/app-development-platform/xpa/

Datenquelle wäre mehr CSV. Geht auch mit der kostenlosen. Mit der 4-GL kann man rasch Prozesse abbilden, komplexe Systeme aufbauen.

Die kostenlose hat keinen direkten Zugriff auf SQL oder ODBC: XML und CSV aber sehr wohl. Die Daten in einer Memory Tabelle in die Dataview packen und es geht los face-big-smile

C# wird unterstützt. Damit kann man auch Queries ausführen. Nur nicht so schön.


Und ja: es gab schon immer Beispiele mit Magic Word oder Excel zu befüllen. Im Prinzip über die bekannten Schnittstellen.

XPA setzt auf Visual Studio Designer. Leider handelt es sich um eine Einzelplatzgeschichte. face-wink mehrere XPA Single User Edition in Arbeitsgruppe oder auf einen PC laufen nicht parallel.
Kraemer
Kraemer 24.03.2023 um 14:34:44 Uhr
Goto Top
Zitat von @SPSman:

zuviel Kaffee gehabt?
6247018886
6247018886 24.03.2023 um 14:39:48 Uhr
Goto Top
Zitat von @Kraemer:
zuviel Kaffee gehabt?

SPS durchgebrannt face-big-smile.
Crusher79
Lösung Crusher79 24.03.2023 um 14:54:45 Uhr
Goto Top
Vlt. doch lieber Stackoverflow? Zumindest dreht es sich sehr, sehr häufig ums proggen.

Quick/ Dirty. Mit Bordmitteln oder 3rd Party. Ggf. wäre so eine Frage dort garnicht schlecht aufgehoben. Ist ja mehr FI-AE.
SPSman
SPSman 24.03.2023 um 22:09:48 Uhr
Goto Top
Hi danke für eure Antworten.

Zitat von @6247018886:

Import-Excel Module für Powershell
https://www.powershellgallery.com/packages/ImportExcel/7.8.4

Leider ist das fast exact so schnell wie das COM Objekt. (2258,38ms vs. 2258,84ms beim COM)
Somit bleiben wohl Boardmittel ... SQL etc. wäre sicherlich nicht schlecht nur da hängt noch ne groooße Struktur hinter und damit kann ich nicht einfach ein Element(das xlsx file) rauslösen.

Hier das Script für die interessierten:
#Aktuelle standardpfad Setzen
Set-Location "H:\01_Projekte"  

#dezidierte Scripte einbinden
Get-ChildItem ".\00_scripte" | Where {$_.Name -like "*.ps1"} | ForEach {  
 
    . .\00_scripte\$_
}

function Create_Proj_obj
{
    return [pscustomobject] @{
        'SPNum' = [STRING]""  
        'Nummer' = [STRING]""  
        'Kunde' = [STRING]""  
        'Projekt' = [STRING]""    
    }


}




function Get-AZNProj
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)][STRING]$Pfad,
        [Parameter(Mandatory=$True)][STRING]$PW
    )

    If (Test-Connection localhost -Count 1 -quiet)
    {
    #Program definieren
    $excel = New-Object -ComObject Excel.Application
    #im Hintergrund ausführen
    $excel.visible = $false
    #Datei öffnen
    $workbook = $excel.workbooks.open($Pfad,3,0,5,$PW,$PW)
    $tabelle= $workbook.Worksheets.Item('Projektübersicht')  

    $ProjListe = @()

    for( $sp=3;$sp -le 53; $sp++){
        #Alte Daten ablöschen
        $ProjData= Create_Proj_obj
        # Felder auslesen
        $ProjData.SPNum = $sp
        $ProjData.Nummer = $tabelle.Cells.Item(4,$sp).Text
        $ProjData.Kunde = $tabelle.Cells.Item(5,$sp).Text
        $ProjData.Projekt = $tabelle.Cells.Item(6,$sp).Text
    #    $ProjData| Add-Member -NotePropertyName 'Std' -NotePropertyValue [FLOAT] $NULL  
        IF ($ProjData.Nummer -ne "" -or $ProjData.Kunde -ne "" -or $ProjData.Projekt -ne "" )  
        {
            $ProjListe += $ProjData
        }

    
    }
    #$ProjListe|Format-Table
    $excel.Quit()
    #>
    }else{

    sendenachricht "Server nicht erreichbar."  


    }
return $ProjListe
}

Write-host "Excel-Appl"  
Get-AZNProj -Pfad 'H:\temp\AZN.xlsx' -PW (Get-Content 'H:\temp\AZN.pw')  



Zitat von @Crusher79:

Vlt. doch lieber Stackoverflow? Zumindest dreht es sich sehr, sehr häufig ums proggen.

Quick/ Dirty. Mit Bordmitteln oder 3rd Party. Ggf. wäre so eine Frage dort garnicht schlecht aufgehoben. Ist ja mehr FI-AE.

-> Beruflich bin ich halt SPS-Programmierer und Systemadmin; privat mache ich mir das leben mit Minitools leichter ;)
Crusher79
Crusher79 25.03.2023 um 15:18:26 Uhr
Goto Top
https://magicsoftware.my.salesforce-sites.com/PublicKnowledge/articles/b ...

https://magicsoftware.my.salesforce-sites.com/PublicKnowledge/articles/b ...


Wenn du mal Bock zum Spielen hast, könntest dir mal die 4 GL anschauen.

https://lg.magicsoftware.com/magic-xpa-free-single-user-edition

RIA oder Webservice sind auch mit drin. Mit Windows Server zu Hause hättest du sogar einfach Web-Applikationen oder eine Handy App.

Handy App ist nur ein Wrapper. Man gibt Server und Programm in URL mit. Die eig. Verarbeitung passiert auf den Server System. In der Single User Variante werden die auch mit installiert.

Zugegen viel mächtiger als das was du als Anforderung geschrieben hast. Mit den integrierten Befehlen lassen sich pro Zeile die Daten einfach ümbiegen.

Call auf Programm Nummer + ggf. Parameter und du übergibst es an einen weiteren Task. Geht natürlich auch so mit C# oder PowerShell.


Die Beispiel Programme sind mitunter auch nur 3-Zeiler, wo kurzt gesagt wird wie man etwas umsetzt. WebService lässt sich einfach konsiumieren oder selber erstellen.


Wenn du zu Hause mal Bock hast sollte auch Single-User Edition ausreichen. C# ist integriert und man Code-Snippets im Task verwenden. Das Ergebnis verwurstet man wieder mit Magic. CSV oder XML als Datenquelle sind kein Problem. SQL Query geht nur über Umwege, da die Databse Gateways in der kostenlosen Version deaktiviert sind. ABER ein C#-Connecion String würde auch hier Ergebnisse liefern. Oder den Umweg über Extern: C# holt füllte CSV die dann in einen Task wieder eingelesen wird.


Gerade als Home-User hättest du lizenzrechtlich keine Probleme und ein mächtiges Spielzeug.