![]() |
LUACom und Excel - International verwendbare Skripte
Guten Morgen,
mein aktuelles Problem hat nichts mit Delphi zu tun, aber ich hoffe, mir kann dennoch jemand helfen. Ich habe ein Skript geschrieben, welches mir eine Excel-Tabelle erstellt, formatiert und mit Daten füllt, welche zuvor an das Skript übergeben wurden. Ich werdehier für meine Beispiele aber sehr einfachen Beispielcode verwenden ;) Das Skript tut was es soll und auch das Ergebnis im Excel sieht genau so aus, wie ich das möchte, aber eine Sache ist noch sehr unschön gelöst. Ein deutsches Excel nimmt nur deutsche befehle an (Beispiel: SUMME(A1:A3)). Wenn man diese Formel aber in ein englisches Excel packen würde, würde es nicht klappen, weil die FUnktion dort SUM(A1:A3) heißen würde. SUM funktioniert aber wiederum nicht im deutschen Excel, weil dieses ja SUMME erwartet. Und was ist, wenn mal ein Franzose oder so das Skript testen wollen würde? Ich suche also eine Möglichkeit, das Skript so zu schreiben, dass die Formeln in jedem Excel unabhängig von der Sprache angenommen werden. Wenn ich mir im Excel ein Makro erstelle, enthält der folgenden VBA Code:
Code:
Um mir etwas schreibarbeit zu sparen habe ich mir 2 Funktionen geschrieben. Eine, welche mir eine zelle als Range-Objekt gibt und eine Funktion, welche diese Zelle dann mit Inhalt füllt:
Range("C4").Activate
ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
Code:
Auf den vorhergehenden Code bauen dann die restlichen Codeschnipsel auf :) In allen weiteren beispielen fülle ich jeweils 3 Zellen untereinander mit einer 1 und in die 4. Zelle darunter kommt die Summe daraus (also 3).
require('luacom')
excel = luacom.CreateObject("Excel.Application") excel.Visible = true wb = excel.Workbooks:Add() ws = wb.Worksheets(1) --format functions function selectCell (aCell) local range = nil; range = aCell .. ":" .. aCell; result = ws:Range (range); return result; end; function writeInCell (aCell, aContent) cell = selectCell (aCell) cell.Value2 = aContent; end; Folgende 2 Beispiele funktionieren:
Code:
Was nicht funktioniert ist:
writeInCell("A1", 1);
writeInCell("A2", 1); writeInCell("A3", 1); writeInCell("A4", "=Summe(A1:A3)"); writeInCell("B1", 1); writeInCell("B2", 1); writeInCell("B3", 1); cell = selectCell ("B4"); cell.Formula = "=Summe(A1:A3)";
Code:
Nach dem Code bricht das Skript mit folgender Fehlermeldung ab
writeInCell("C1", 1);
writeInCell("C2", 1); writeInCell("C3", 1); cell = selectCell ("B4"); cell.FormulaR1C1 = "=Summe(R[-3]C:R[-1]C)"; Zitat:
Jetzt will ich aber erstmal irgendeine Variante haben, welche international lauffähig ist. Dafür habe ich es mit den englischen begriffen probiert. Die Beispiele habich dafür so gelassen wie Vorher, nur dass ich "Summe" durch "Sum" ersetzt habe. In den ersten beiden beispielen (normal in die Zelle schreiben und Formula) steht dann in den Feldern, wo eigentlich die Summe erscheinen sollte nur noch "#NAME?" und das Beispiel mit FormulaR1C1 spuckt noch den selben Fehler aus wie vorher. Gibt es überhaupt eine Möglichkeit, ein Skript zu schreiben, was in verschiedensprachigen Excelversionen läuft? In diesem beispiel habe ich zwar nur die Summe verwendet, aber es sollte ja Klar sein, was ich möchte. Ich hoffe mir kann jemand helfen. Liebe Grüße Getox |
AW: LUACom und Excel - International verwendbare Skripte
Ohne es jetzt komplett nachvollziehen zu können was genau nicht klappt, aber müsste nicht FormulaR1C1 immer englische Anweisungen beinhalten (siehe VBA-Code)? Denn der ganze VBA-Code ist immer nur in englisch.
Auch ein ActiveCell.Formula = "=SUM(A1:A3)" muss funktionieren, egal in welcher Sprache das Excel läuft. |
AW: LUACom und Excel - International verwendbare Skripte
Analog zu deiner writeInCell würde ich eine writeFormularInCell Funktion erstellen, die das von baumina genannte umsetzt:
Code:
Die Alternative zu Formula, die dann sprachabhängig ist, wäre nämlich FormulaLocal, weswegen ich auch vermuten würde, das Formula funzt.
function writeFormulaInCell (aCell, aFormula)
cell = selectCell (aCell) cell.Formula = aFormula; end; |
AW: LUACom und Excel - International verwendbare Skripte
Zitat:
FormulaR1C1 konnte ich weder in deutsch noch in englisch zum laufen bringen. In allen fällen scheint es bei Formula so, als wenn stumpf der String, den man zuweist in das Feld geschrieben wird, so wie bei Value2. |
AW: LUACom und Excel - International verwendbare Skripte
Wenn du dir innerhalb von Excel ein VBA-Script machst und dort ActiveCell.Formula = "=SUM(A1:A3)" ausführst, klappt das denn oder auch nicht?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz