![]() |
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:
Das Result ist im Screenshot dargestellt:
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; Hat sich etwas in Office365 geändert? Weitere Zuweisungen habe ich in den Zeilen 1089 ff probiert:
Delphi-Quellcode:
Keine Variante funktioniert. Die .tlb habe ich nicht verändert. Die komplette .pas ist im Anhang.
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 Hat jemand eine Idee?? Liebe Grüße und Danke Tom |
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?
|
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Hallo,
zumindestens hier steht ein Unterschied ![]() 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. |
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 |
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 |
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. |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Delphi-Quellcode:
Danke für eure Mühe
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); |
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). |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
|
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 :/ |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Zitat:
|
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Zitat:
Delphi-Quellcode:
So geht's vllt. besser.
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 Gruß K-H |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Das bringt bei mir leider auch einen OLE-Fehler :/
|
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Hallo,
nimm doch mal einen einfacheren Ausdruck zum Testen. Oder sogar mal VarArrayOf(1.0,2.0,3.0). |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Dann schmeiß zunächst einmal die Stringkonstante aus dem Excel-Teil heraus.
Versuch mal den Zugriff auf die Excel-Daten mit activesheet.cells(a,b). Gruß K-H |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Ich bin wieder zurück :)
Auf die Excel-Daten kann ich mit activesheet.cells(a,b) zugreifen und mir die Daten auch anzeigen lassen über eine Message. Zuweisungen an die Series funktionieren nicht. Ich benutze Delphi XE2. Das soll wohl ein XE2 Problem sein. Etwas Interessantes:
Delphi-Quellcode:
gibt mir Folgendes: =Series("Data1(IGV=0°)",,,1).
überwachungsvariablestring:=ser.Formula;
Offensichtlich steht in meiner Series keine Range. Das würde auch erklären warum keine Daten in der Series stehen. |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich versuche Office 2010.bpl als Komponente in RAD Studio 10.3 zu laden, bekomme ich den Fehler aus dem Screenshot. Kann jemand damit etwas anfangen?
|
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Ist kein Access bei dem office-paket dabei?
|
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Zitat:
Denke schon halt nur nicht die 2010'er und ich denke deshalb knallts.. gruss |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Access ist bei meinem Office 365 dabei.
|
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Zitat:
gruss |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Office 2010 ist aber nicht Office 365.
Genausowenig wie Packages für Office 97 mit Office 2000 liefen oder Office 2000 Packages mit Office 2003 oder ... durch die gesamte Versionshistorie ... Such Dir mal in deinem Delphi die Funktion "Typbibliothek importieren". Da solltest Du eine Liste von importierbaren Typbibiotheken finden. Ist da was für Office 365 bei? Dann importiere die bitte. In der Regel sollten dann in der Komponentenpalette unter ActiveX entsprechende Komponenten erscheinen. Ist da nix bei, dann wähle bitte die Hinzufügenoption. Gehe in das Installationsverzeichnis von Office 365 und suche dort nach Dateien mit der Endung .olb ggfls. auch .tlb. Ist da was zu finden, dann importiere die bitte. Auch hier sollte dann unter ActiveX was in der Komponentenpalette zu finden sein. Wie es bei aktuellen Delphis genau aussieht, weiß ich nicht, dass musst Du selbst herausfinden. Sinngemäß müsste es in etwa so laufen: ![]() Suchmaschine bemühen: ![]() Eventuell hilft das ja irgendwie weiter. |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Eventuell reichen die Laufzeitbibliotheken für Access 2010 dafür schon aus.
![]() gruss |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Liste der Anhänge anzeigen (Anzahl: 3)
Lieben Dank für die Antworten.
Die Typbibliotheken habe ich schon. (siehe Screenshot RegTypbliotheken). Die Packages konnte ich auch installieren (siehe Screenshots Komponenten installiert, installierte Packages). Trotzdem habe ich keinerlei Office Komponenten in der Tool-Palette ....wie z.b TExelchart. |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Zitat:
![]() |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Zitat:
Gruß K-H |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Es ist aber trotzdem falsch.
Bzw. wenn ein OLE-Fehler bleibt, heißt das nicht, dass die ungerade Anzahl von " egal ist oder nicht, sondern nur das es nach der Korrektur eine Fehlerursache weniger gibt, ansonsten aber noch mehr falsch sein dürfte. Die vollständige Fehlermeldung wäre eventuell auch mal hilfreich. Bei OLE-Fehlern bekommt man oft noch 'ne hexadezmale Zeichenfolge geliefert, die bei der Annäherung an die Fehlerursache durchaus hilfreich sein kann. Wenn man in Excel in 'ner Zelle sowas sieht 0° heißt das noch lange nicht, dass man es auch so per String an Excel übergeben kann. Eventuell muss da nur 'ne 0 übergeben werden, die Anzeige von 0° macht Excel dann, abhängig von der Formatierung der Zelle, selbst. Da ![]() |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Delphi-Quellcode:
Ich versuche es gerade mal in später Bindung:
unit TestSpäteBindung;
interface uses Variants, ComObj,Excel2010,Dialogs,Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms; procedure ExcelFuellen; implementation procedure ExcelFuellen; var Excel : Variant; row, column,I: Integer; WBk, WS, SheetName: OleVariant; Diagramm1: OleVariant; serie : OleVariant; begin try Excel := GetActiveOleObject('Excel.Application'); except Excel := CreateOleObject('Excel.Application'); end; excel.Application.SheetsInNewWorkBook := 8; //Die 8 is die Anzahl der Sheets Excel.Workbooks.Add; Excel.Sheets[1].Name := 'DP Sheet'; //Hierbei ist 1 das erste Sheet 2 das zweite usw. //von nun an können wir unser Sheet auch über den gegebenen Namen ansprechen! zB: Excel.Sheets['DP Sheet']; row := 1; column := 2; Excel.Sheets['DP Sheet'].Cells[row,column].Value := 'Hallo'; Excel.Sheets['DP Sheet'].Cells[1,3].value := 5.23; //Da Value vom Typ Variant is können wir hier fast alles reinschreiben for I := 1 to 20 do begin Excel.Sheets['DP Sheet'].Cells[I,3].value := I; end; for I := 1 to 20 do begin Excel.Sheets['DP Sheet'].Cells[I,4].value := I+30; end; for I := 1 to 20 do begin Excel.Sheets['DP Sheet'].Cells[I,5].value := I+50; end; for I := 1 to 20 do begin Excel.Sheets['DP Sheet'].Cells[I,6].value := I+80; end; Excel.Range['A1:B4'].Select; //Den Bereich A1 bis B4 makieren Excel.Selection.Font.Bold := true;//und im Makierten Bereich die Schriftdicke ändern Excel.Cells[row,column].select; Excel.ActiveCell.FormulaR1C1 := '=R2C1+R3C1'; // Rechnet A2 + A3 //Excel.Sheets['DP Sheet'].Range['A5', 'A5'].Value := 'The meaning of life, the universe, and everything, is'; //Excel.Sheets['DP Sheet'].Range['B5', 'B5'].Value := 42; Excel.Charts.Add; Excel.ActiveChart.ChartType:= xlColumnClustered; Excel.ActiveChart.Location (Where:= xlLocationAsObject, Name:= 'DP Sheet'); Excel.ActiveChart.HasTitle := True; Excel.ActiveChart.ChartTitle.Characters.Text := 'Reisezeiten'; Excel.ActiveChart.Axes(xlCategory, xlPrimary).HasTitle := True; Excel.ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text := 'Uhrzeit'; Excel.ActiveChart.Axes(xlValue, xlPrimary).HasTitle := True; Excel.ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text := 'Dauer in sec'; serie := Excel.ActiveChart.SeriesCollection.NewSeries; //serie.XValues := '=''Sued_Ost''!Z3S10:Z3'+'S10'; //serie.Values := '=''Sued_Ost''!Z4S10:Z4'+'S10'; serie.XValues := '=''Sued_Ost''!C3:C10'; serie.Values := '=''Sued_Ost''!D3:D10'; Excel.Visible := true; Excel := unassigned; end; end. Komischerweise werden immer alle Datenreihen geplottet. Die Werte in der Serie haben gar keinen Einfluss auf das Diagramm.? |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Bitte entschuldigt den 'Spam'.
Das 'Sued_Ost' musste ich natürlich durch den richtigen Worksheet Namen ersetzen. Jetzt habe ich das Problem, dass das Diagramm trotzdem alle Daten aus
Delphi-Quellcode:
automatisch ins Diagramm nimmt. Warum?
for I := 1 to 20 do begin
Excel.Sheets['DP Sheet'].Cells[I,3].value := I; end; for I := 1 to 20 do begin Excel.Sheets['DP Sheet'].Cells[I,4].value := I+30; end; for I := 1 to 20 do begin Excel.Sheets['DP Sheet'].Cells[I,5].value := I+50; end; for I := 1 to 20 do begin Excel.Sheets['DP Sheet'].Cells[I,6].value := I+80; end; |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Weil das Chart in Excel einen Bezug auf die Zellen hat (und behält). Änderst du die Zellwerte, ändert sich das Chart.
|
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Ok. Ich habe eine Excel mit recht vielen Werten. Möchte aber nur ausgewählte Spalten anzeigen lassen. Wie kann ich das dann machen?
Ich dachte den Bezug hätte ich nur durch
Delphi-Quellcode:
festgelegt.
serie.XValues := '=''Sued_Ost''!C3:C10';
serie.Values := '=''Sued_Ost''!D3:D10'; |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Indem du dem Diagramm nur gewisse Spalten als Datenquelle zuordnest?
Kannst du das nicht mal manuell in Excel machen und das mit dem Makro-Rekorder aufzeichnen, damit du weißt, wie das nachher im Code zu schreiben ist? |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Genau. Das habe ich ja durch
Delphi-Quellcode:
gemacht. Das wäre eigentlich nur eine Datenreihe.
serie.XValues := '=''Sued_Ost''!C3:C10';
serie.Values := '=''Sued_Ost''!D3:D10'; Trotzdem hat er alle drin. |
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Ah Ok, jetzt versteh ich worauf du hinaus willst glaub ich. Es gibt in Excel-Diagrammen die SeriesCollection, als einer Sammlung von Datenreihen, die in dem Diagramm dargestellt werden. Du setzt immer nur die Daten der einer Serie aus dieser SeriesCollection.
|
AW: Excel Series.Value Zuweisung funktioniert mit Office 365 nicht
Das Problem habe ich jetzt gelöst. Vielen lieben Dank an euch alle.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 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