AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein LUACom und Excel - International verwendbare Skripte
Thema durchsuchen
Ansicht
Themen-Optionen

LUACom und Excel - International verwendbare Skripte

Ein Thema von Getox · begonnen am 21. Nov 2013 · letzter Beitrag vom 21. Nov 2013
Antwort Antwort
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#1

LUACom und Excel - International verwendbare Skripte

  Alt 21. Nov 2013, 12:05
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:
Range("C4").Activate
ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
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:

Code:
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;
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).

Folgende 2 Beispiele funktionieren:

Code:
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)";
Was nicht funktioniert ist:

Code:
writeInCell("C1", 1);
writeInCell("C2", 1);
writeInCell("C3", 1);
cell = selectCell ("B4");
cell.FormulaR1C1 = "=Summe(R[-3]C:R[-1]C)";
Nach dem Code bricht das Skript mit folgender Fehlermeldung ab

Zitat:
LUA: COM exception.\src\library\tLuaCOM.cpp,398):
stack traceback:
[C]: ?
excelTest1.lua:36: in main chunk
[C]: ?
Zeile 36, welche den Fehler verursacht, ist die wo ich versuche FormulaR1C1 einen Wert zuzuweisen.

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
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: LUACom und Excel - International verwendbare Skripte

  Alt 21. Nov 2013, 13:50
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.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (21. Nov 2013 um 14:13 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: LUACom und Excel - International verwendbare Skripte

  Alt 21. Nov 2013, 14:45
Analog zu deiner writeInCell würde ich eine writeFormularInCell Funktion erstellen, die das von baumina genannte umsetzt:

Code:
function writeFormulaInCell (aCell, aFormula)
  cell = selectCell (aCell)
  cell.Formula = aFormula;
end;
Die Alternative zu Formula, die dann sprachabhängig ist, wäre nämlich FormulaLocal, weswegen ich auch vermuten würde, das Formula funzt.
Ralph
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#4

AW: LUACom und Excel - International verwendbare Skripte

  Alt 21. Nov 2013, 16:02
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.
Wenn ich bei Formula "=SUM(A1:A3)" zuweise, steht nachher im Excelfeld "#NAME?" und wenn man draufklickt ist da auch die englische Fassung der Formel drin. Wenn ich jedoch "=SUMME(A1:A3)" bei Formula zuweise klappt es.

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.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?

Geändert von Getox (21. Nov 2013 um 16:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: LUACom und Excel - International verwendbare Skripte

  Alt 21. Nov 2013, 16:06
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?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz