From 5f3a17c5c7f3c2873205fcf3af85a979925afe3f Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Mon, 3 Aug 2026 09:56:06 +0300 Subject: [PATCH] fix: exportul Excel din GridExtras respecta ordinea de afisare a coloanelor gridutils.copytoexcel parcurgea grid.Columns() pe indexul de creare, care in VFP nu are legatura cu ColumnOrder. Coloanele se sorteaza acum dupa ColumnOrder inainte de a construi lista de campuri, deci exportul iese in ordinea de pe ecran, inclusiv dupa ce utilizatorul muta coloane (ordine salvata de savegridpreferences). Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01YB2eA3Wd31DZiXjzVRc6VJ --- utile/GridExtras/gridextras.vc2 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/utile/GridExtras/gridextras.vc2 b/utile/GridExtras/gridextras.vc2 index 1d28263..e4e1f40 100644 --- a/utile/GridExtras/gridextras.vc2 +++ b/utile/GridExtras/gridextras.vc2 @@ -2434,7 +2434,7 @@ DEFINE CLASS gridutils AS form PROCEDURE copytoexcel *!* LPARAMETERS tcXLSFile, tcSheet, tvWorkArea, tcExcelFieldList, tcTableFieldList, tcTableForExpr #DEFINE ALPHANUMERICCHR "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz1234567890" - LOCAL lnCounter, loColumn, lcXLSFile, lcSheetName, lcAliasWas, lcGridAlias, ; + LOCAL lnCounter, lnOrder, laOrder, loColumn, lcXLSFile, lcSheetName, lcAliasWas, lcGridAlias, ; lcExcelFieldList, lcTableFieldList, lcTableForExpression, loHeaderObject, ; lcFileName, lcAction, lcPath, loExcelApp, loWorkBook, lcKeyName m.lcXLSFile = "C:\" + SYS(2015) + ".xls" @@ -2445,8 +2445,15 @@ DEFINE CLASS gridutils AS form *!* m.lcTableForExpression = FILTER(this.gridobject.recordsource) m.lcSheetName = "Sheet1" STORE "" TO m.lcExcelFieldList, m.lcTableFieldList + *!* coloanele se exporta in ordinea de afisare din grid (ColumnOrder), nu in ordinea de creare + DIMENSION laOrder[MAX(THIS.gridobject.COLUMNCOUNT, 1), 2] FOR m.lnCounter = 1 TO THIS.gridobject.COLUMNCOUNT - m.loColumn = THIS.gridobject.COLUMNS(m.lnCounter) + laOrder[m.lnCounter, 1] = THIS.gridobject.COLUMNS(m.lnCounter).COLUMNORDER + laOrder[m.lnCounter, 2] = m.lnCounter + ENDFOR + =ASORT(laOrder) + FOR m.lnOrder = 1 TO THIS.gridobject.COLUMNCOUNT + m.loColumn = THIS.gridobject.COLUMNS(laOrder[m.lnOrder, 2]) IF m.loColumn.VISIBLE AND m.loColumn.WIDTH > 0 m.loHeaderObject = m.loColumn.CONTROLS(1) m.lcExcelFieldList = m.lcExcelFieldList + IIF(!EMPTY(m.lcExcelFieldList), ',', '') ;