![]() |
AW: Excel mit mehreren Sheets öffnen
Sheet.UsedRange.Columns.AutoFilter
sollte den Autofilter abwechslnd ein und ausschalten. |
AW: Excel mit mehreren Sheets öffnen
Danke Ralph hierfür, allerdings ist ein umschalten (ein/aus) der Autofilter denke ich nicht so gut. Da der Filter sonst gesetzt wird, wo vorher keiner war und das möchte ich eigentlich auch so beibehalten. Daher wollte ich ihn einfach "löschen", was laut Excelmakro ".ShowAllData" ist. Jedoch keine Ahnung wo ich das einsetzen muss, wenn "sheet.ShowAllData"nicht funktioniert.
|
AW: Excel mit mehreren Sheets öffnen
Hmm..
Um zu Prüfen, ob ein Filter aktiviert wurde:
Delphi-Quellcode:
if Excel.ActiveSheet.FilterMode then
und um das Filtern auf einem Sheet auszuschalten:
Delphi-Quellcode:
Excel.ActiveSheet.AutoFilterMode := False;
|
AW: Excel mit mehreren Sheets öffnen
Das ist zu 95% so, wie ich es gesucht habe^^ Zwar ist der Filter dann komplett weg (und nicht nur die Filterbedingungen raus) aber das ist nicht schlimm und umgeht damit das "Speicherproblem".
Edit: Mit "if AXLApp.ActiveSheet.FilterMode then AXLApp.ActiveSheet.ShowAllData;" geht es wie gewollt :D Danke für den Tipp HolgerX Beim Laden der Datei sieht es dann so aus:
Delphi-Quellcode:
Und beim Speichern so:
function XLS_To_StringGrid(AXLApp : OleVariant; AGrid : TStringGrid; Sheetname : string):Boolean;
const xlCellTypeLastCell = $0000000B; var Sheet: OLEVariant; RangeMatrix: Variant; X, Y, K, R: Integer; begin Result := False; try try if (Sheetname <> '') and HaveSheet(AXLApp, Sheetname) then begin Sheet := AXLApp.WorkSheets[Sheetname]; end else Sheet := AXLApp.WorkSheets[1]; // In order to know the dimension of the WorkSheet, i.e the number of rows // and the number of columns, we activate the last non-empty cell of it Sheet.select; if AXLApp.ActiveSheet.FilterMode then AXLApp.ActiveSheet.ShowAllData; //Fix: Fehler durch gesetzte Filter vermeiden Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; X := AXLApp.ActiveCell.Row; // Get the value of the last row Y := AXLApp.ActiveCell.Column; // Get the value of the last column // Set Stringgrid's row &col dimensions. AGrid.RowCount := X; // Excel-Row 1 = Header AGrid.ColCount := Y; RangeMatrix := Sheet.Range['A1', Sheet.Cells.Item[X, Y]].Value; // Assign the Variant associated with the WorkSheet to the Delphi Variant // Define the loop for filling in the TStringGrid K := 0; While (K < X) do begin Inc(K); for r := 1 to y do AGrid.Cells[(R - 1), (K - 1)] := RangeMatrix[K, R]; end; Result := True; except // Logging... end; finally RangeMatrix := Unassigned; Sheet := Unassigned; end; end;
Delphi-Quellcode:
function StringGridToXLS(AXLApp : OleVariant; AGrid : TStringGrid; Sheetname : string):Boolean;
const xlCellTypeLastCell = $0000000B; var Sheet: OLEVariant; MaxCol : Integer; MaxRow : Integer; Range : OleVariant; Data : OleVariant; Col : Integer; Row : Integer; R1,R2 : string; begin Result := False; try //Worksheet auswählen if (Sheetname <> '') and HaveSheet(AXLApp, Sheetname) then begin Sheet := AXLApp.WorkSheets[sheetname]; end else Sheet := AXLApp.WorkSheets[1]; Sheet.select; if AXLApp.ActiveSheet.FilterMode then AXLApp.ActiveSheet.ShowAllData; //Fix: Fehler durch gesetzte Filter vermeiden // Der vorhandenen Daten im Grid, nicht der möglichen in Excel... MaxCol := AGrid.ColCount; MaxRow := AGrid.RowCount; if (MaxRow > 0) and (MaxCol > 0) then begin //Bereich auswählen R1 := RefToCell(1, 1); R2 := RefToCell(MaxCol, MaxRow); Range := Sheet.Range[R1, R2]; if not VarIsNull(Range) then begin //Daten aus Grid holen Data := VarArrayCreate([1, MaxRow, 1, MaxCol], varVariant); for Row := 0 to Pred(MaxRow) do begin for Col := 0 to Pred(MaxCol) do begin Data[Succ(Row), Succ(Col)] := AGrid.Cells[Col, Row]; end; end; //Daten dem Excelsheet übergeben Range.Value := Data; Range.Columns.AutoFit; Result := True; end; end; finally SaveExcel(AXLApp); Range := UnAssigned; Sheet := Unassigned; Data := Unassigned; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 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 by Thomas Breitkreuz