1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// fonction pour transformer un nom de column (A,AB...) en coordonnée absolue
int __fastcall XLSColumnNameToInt(String ColumnName)
{
ColumnName = ColumnName.UpperCase();
int taille_exp = ColumnName.Length();
if(taille_exp>2) return -1; //non supporté par excel
if(taille_exp==1){
char c=ColumnName[1];
return (int)c-64;
}
else{ // expr à 2 chiffres
int diz = ColumnName[1]-64;
int unite =ColumnName[2]-64;
return ( diz*26 +unite);
}
}
void __fastcall ChangerCellulesSelectionnées()
{
............ //lancement xls ( FAQ)
// Récupération des cellules selectionnées...
Variant vCell,vRange;
vRange= vMSExcel.OlePropertyGet("Selection");
// Recupération de l'adresse sous forme $A$1:$C$6
Variant vRangeAdress = vRange.OlePropertyGet("Address");
String RangeAddressStr = vRangeAdress.AsType(varString);
// TransFormation de l'adresse en coordonéés X,Y absolues
int delimiter_pos = LastDelimiter(":",RangeAddressStr);
String depart_adr =Strutils::LeftStr(RangeAddressStr,delimiter_pos-1);
String arrive_adr = Strutils::RightStr(RangeAddressStr,RangeAddressStr.Length()-delimiter_pos);
delimiter_pos=LastDelimiter("$",depart_adr);
String column1 = StringReplace (Strutils::LeftStr(depart_adr,delimiter_pos-1),"$","",TReplaceFlags()<<rfReplaceAll );
String row1 = Strutils::RightStr(depart_adr,depart_adr.Length()-delimiter_pos);
delimiter_pos=LastDelimiter("$",arrive_adr);
String column2 = StringReplace (Strutils::LeftStr(arrive_adr,delimiter_pos-1),"$","",TReplaceFlags()<<rfReplaceAll );
String row2 = Strutils::RightStr(arrive_adr,arrive_adr.Length()-delimiter_pos);
//coordonnées de départ
int c1 = XLSColumnNameToInt(column1);
int r1 = StrToInt(row1);
//coordonnées d'arrivée
int c2 = XLSColumnNameToInt(column2);
int r2 = StrToInt(row2);
// traitement cellule par cellule
for(int i=c1;i<=c2;i++){
for(int k=r1;k<=r2;k++){
//récupération de la cellule
Variant vCell = vWorksheet.OlePropertyGet("Cells",k,i);
//traitement surla cellule
String Coord = IntToStr(i)+","+IntToStr(k);
vCell.OlePropertySet("Value",StringToOleStr(Coord));
}
}
...........
} |
Partager