首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于OLE操纵EXCEL排序有关问题

2012-12-29 
关于OLE操纵EXCEL排序问题本帖最后由 ayaya0001 于 2012-10-31 12:36:50 编辑我想把一张表分几个部分(例如

关于OLE操纵EXCEL排序问题
本帖最后由 ayaya0001 于 2012-10-31 12:36:50 编辑 我想把一张表分几个部分(例如XX行到XX行的所有列为一个部分),对每个部分分别排序

在循环中执行排序  但是实际上执行Exec之后就跳出循环了 即只执行了po=0的情况 而注释掉Exec语句for循环能够正常执行
求各位大大指教


    for(po = 0; po < gnum; po++)
   {

     trange = "A" + IntToStr(line[po]) + ":F" + IntToStr(peoplenum[po]+1+line[po]-2);//选定区域
     Range = WorkSheet1.PG("Range", trange.c_str());
     Range.PR("Select");
     Range.Exec(Function("Sort")<<ExcelApp.OlePropertyGet("Selection")<<1);

   }

[解决办法]
6楼的VBA代码在C++Builder中这样:
Variant vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook")
        .OlePropertyGet("Sheets", "sheet");

Variant vSortFields = vSheet.OlePropertyGet("Sort").OlePropertyGet("SortFields");
vSortFields.OleFunction("Clear");

Variant vRange;

vRange = vSheet.OlePropertyGet("Range", "C2:C573");
vSortFields.OleFunction("Add",
        vRange, // Key:=Range("C2:C573")
        0, // SortOn:=xlSortOnValues,
        2, // Order:=xlDescending,
        0  // DataOption:=xlSortNormal
        );
vRange = vSheet.OlePropertyGet("Range", "A2:A573");
vSortFields.OleFunction("Add",
        vRange, // Key:=Range("A2:A573")
        0, // SortOn:=xlSortOnValues
        1, // Order:=xlAscending,
        0  // DataOption:=xlSortNormal
        );
vRange = vSheet.OlePropertyGet("Range", "B2:B573");
vSortFields.OleFunction("Add",
        vRange, // Key:=Range("B2:B573")
        0, // SortOn:=xlSortOnValues
        1, // Order:=xlAscending
        0  // DataOption:=xlSortNormal
        );

vRange = vSheet.OlePropertyGet("Range", "A1:F573");
vSheet.OlePropertyGet("Sort").OleProcedure("SetRange", vRange); // Range("A1:F573")
vSheet.OlePropertyGet("Sort").OlePropertySet("Header", 1); // xlYes
vSheet.OlePropertyGet("Sort").OlePropertySet("MatchCase", 0); // False
vSheet.OlePropertyGet("Sort").OlePropertySet("Orientation", 1); // xlTopToBottom
vSheet.OlePropertyGet("Sort").OlePropertySet("SortMethod", 1); // xlPinYin
vSheet.OlePropertyGet("Sort").OleProcedure("Apply");

热点排行