Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Excel Series.Value Zuweisung funktioniert mit Office 365 nicht (https://www.delphipraxis.net/200872-excel-series-value-zuweisung-funktioniert-mit-office-365-nicht.html)

Nekromus 3. Jun 2019 14:35

Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Liste der Anhänge anzeigen (Anzahl: 2)
Liebe Community,

Ich habe folgendes Problem:
mit der Verwendung von Office 365 funktioniert mein Code nicht mehr. Mit Excel 2010 funktioniert alles einwandfrei.
Das Problem habe ich bereits identifiziert. Die Series mit den XValues und den Values ist leer bei Verwendung von Office365.
Delphi-Quellcode:
  pts:= ser.Points(EmptyParam) as Points;
          überwachungsvariable:=pts.Count;  //= 0  Keine Werte in der Series
          pt:= pts.Item(pts.Count); // Hier knallt es


Die Zuweisung der Werte geschieht in den Zeilen 550 – 575 bei den Funktionen ExcelRangetoString.
Delphi-Quellcode:
function TDoExportForm.ExcelRangeToString(worksheet_name: WideString;
  rng: ExcelRange): WideString;
var
  s: WideString;
begin
  if worksheet_name <> '' then s:= QuotedStr(worksheet_name) + '!'
  else s:= '';

  Result:= '=' + s + rng.AddressLocal[false, false, xlA1, False, EmptyParam];
end;


function TDoExportForm.ExcelRangeToString(_ws: _Worksheet; cell1,
  cell2: OleVariant): WideString;
begin
  Result:= ExcelRangeToString(_ws.Name, _ws.Range[cell1, cell2]);
 end;
Das Result ist im Screenshot dargestellt:

Hat sich etwas in Office365 geändert?

Weitere Zuweisungen habe ich in den Zeilen 1089 ff probiert:
Delphi-Quellcode:
  ser.XValues:= '="DATA1(IGV=0°)"!D3:D62"';                  // OLE Fehler
          ser.XValues:= '="DATA1(IGV=0°)"!R[-3]C[-3]:R[-62]C[-3]"';  // OLE Fehler
          ser.XValues:= '="DATA1(IGV=0°)"!R3C3:R62C3"';              // OLE Fehler

          ser.Values:=rng; //Mitglied nicht gefunden
Keine Variante funktioniert. Die .tlb habe ich nicht verändert. Die komplette .pas ist im Anhang.

Hat jemand eine Idee??

Liebe Grüße und Danke
Tom

Der schöne Günther 3. Jun 2019 14:50

AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Ich tue mich jetzt schwer mich durch eine 1700 Zeilen schwere Unit zu wühlen. Hast du kein Minimalbeispiel dass man nachstellen kann ohne Excel-Profi zu sein?

hoika 3. Jun 2019 15:09

AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Hallo,
zumindestens hier steht ein Unterschied

https://stackoverflow.com/questions/...nd-office-2013

Da musst Du dich wohl mit "try and error" durchhangeln ...
Probier das doch mal als Macro in den beiden Words und finde (hoffentlich) die Unterschiede.

Chemiker 3. Jun 2019 22:29

AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Hallo,

Du benutzt die „frühe Bindung“ um Excel zu steuern. Der Vorteil ist die Geschwindigkeit, dass bei der Deklaration automatisch IntelliSense zur Verfügung steht. Der Nachteil bei der frühen Bindung ist oftmals das die frühe Bindung an einer bestimmten Excel-Version gebunden ist.
Der große Vorteil bei Verwendung von der „späten Bindung“ besteht hauptsächlich darin, dass unabhängig von der Excel-Version gearbeitet werden kann, allerdings sollte man sich mit Objekten, Methoden und Eigenschaften von Excel vertraut machen.
Wenn Du also Excel – Version unabhängig arbeiten wills, solltest Du Deine Unit auf „späte Bindung“ umstellen.

Bis bald Chemiker

Nekromus 4. Jun 2019 08:06

AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo hoika,

die Makroaufzeichnung habe ich mal als Screenshot angehängt. Da gibt es keine Unterschiede. Mein Screenshot von RangeToString stimmt ja überein (in Delphi).

@Chemiker,

hast du ein Tutorial zur späten Bindung für mich?

Lieben Dank

hoika 4. Jun 2019 08:29

AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Hallo,
wo setzt du deine Variable ser?

PS:
Ich habe auch keine Lust, die 1.000 Zeilen zu durchgehen.

Nekromus 4. Jun 2019 09:31

AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Delphi-Quellcode:
  for i:= 1 to Excel.Worksheets.Count do begin
    ws:= Excel.Worksheets[i] as _Worksheet;
    if IsDataWorksheet(ws) then begin
      spalteFlow:= FindeSpalte(ws, FlowStr);
      spalteValue:= FindeSpalte(ws, ValueStr);


      if (spalteFlow > 0) and (spalteValue > 0) then begin
        zeilen:= Min(ZaehleZeilen(ws, SpalteFlow), ZaehleZeilen(ws, SpalteValue));
        if Zeilen > 0 then begin
          ser:= sc.NewSeries;  //Hier wird neue ser erzeugt
          ser.Name:= ws.Name;
          ser.AxisGroup:= xlPrimary;
          überwachungsvariablestring:=ser.Name;

          cell1:= ws.Cells.Item[3, spalteFlow];
          cell2:= ws.Cells.Item[zeilen +2, spalteFlow];

          ser.XValues:= ExcelRangeToString(ws, cell1, cell2);
Danke für eure Mühe

hoika 4. Jun 2019 09:42

AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Hallo,
hm, in dem Macro steht "=', du schreibst '="

Vielleicht mal '+QuotedStr benutzen?
Das ! bei D3 kann ich nicht.


Nimm doch mal testweise genau den gleichen String wie im Macro (auch wenn die Zellen selbst nicht passen).

Jumpy 4. Jun 2019 09:42

AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Zum Thema Late Binding bei Excel:

http://excelmatters.com/2013/09/23/v...-late-binding/

Nekromus 4. Jun 2019 11:23

AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
 
Hallo hoika,

"/' ist doch nur zwischen VBA und Delphi getauscht. Die direkte Zuweisung mit dem gleichen String habe ich auch schon probiert. Das wirft einen OLE-Fehler.

@Jumpy: Danke

Hat sonst niemand eine Idee? Dann müsste ich ja alle Units zu Late Binding umcoden :/


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.
Seite 1 von 4  1 23     Letzte »    

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