|
- function 考场安排() {
- const room = Sheets('条件').Cells(1).CurrentRegion();
- with (Sheets('考场').Cells(1).CurrentRegion) {
- const language = {}, group1 = {}, group2 = {};
- let dicCM, dicLanguage, dicGroup, dicBG;
- const addToGroup = (dic, key, value) => {
- dic[key] ??= []; // 初始化空数组
- dic[key].push(value); // 加入数组
- };
- Value2.slice(1).forEach(([, , C, D, E]) => {
- addToGroup(language, D, E); // 加入“西”、“日”、“英”组合
- addToGroup(group1, C.substr(0, 2), E); // 加入“物化”和“政史”组合
- addToGroup(group2, C.substr(-1, 1), E); // 加入“生”、“地”、“政”组合
- });
- function arrangeAll() { // 全部随机分配考场和座号
- let [idRoom, idSeat, res] = [1, 1, {}];
- Value2.slice(1).map(v => v[4]).sort().forEach(id => {
- if (idSeat > room[idRoom][1]) { // 一个考场排满后换下一个
- idRoom++;
- idSeat = 1;
- }
- res[id] ??= [idRoom, idSeat++]; // 记录考号对应的外语考场和座位
- });
- return res;
- }
- function arrangeGroup(dic) { //按分组随机分配考场和座号
- let [idRoom, idSeat, res] = [1, 1, {}];
- Object.entries(dic).map(([k, v]) => [k, v.length])
- .sort((a, b) => a[1] - b[1]) // 按参考人数排序,从人少到人多
- .forEach(([k, v]) => {
- dic[k].sort().forEach(id => { // 随机排序待分配考号
- if (idSeat > room[idRoom][1]) {
- idRoom++;
- idSeat = 1;
- }
- res[id] ??= [idRoom, idSeat++];
- });
- idRoom++; // 一个分组排完后排下一个,换到下一个考场
- idSeat = 1; // 初始化考场座号
- });
- return res;
- }
- dicCM = arrangeAll(); // 随机分配“语文和数学”考场和座号
- dicLanguage = arrangeGroup(language); // 随机分配“外语”考场和座号
- dicGroup = arrangeGroup(group1); // 随机分配“物化和政史”考场和座号
- dicBG = arrangeGroup(group2); // 随机分配“生物和地理”考场和座号
- Value2 = Value2.map((v, i) => i ? [...v.slice(0, 4), `'${v[4]}`, ...dicCM[v[4]], ...dicLanguage[v[4]], ...dicGroup[v[4]], ...dicBG[v[4]]] : v);
- }
- }
- function 统计结果() {
- const dic = Sheets('考场').Cells(1).CurrentRegion().slice(1).reduce((a, [, , C, D, , F, , H, , J, , L,]) => {
- [['语数', F], [D, H], [C.substr(0, 2), J], [C.substr(-1, 1), L]].forEach(([k, v]) => {
- a[k] ??= {};
- a[k][v] ??= 0;
- a[k][v]++
- });
- return a;
- }, {});
- const order = ['语数', '西', '日', '英', '物化', '政史', '政', '生', '地'];
- const res = Object.entries(dic).map(([k, v]) => {
- const arr = Object.entries(v).filter(v => v[1] !== 0).sort((a, b) => a[0] - b[0]);
- const brr = Object.values(v).filter(Boolean).sort((a, b) => a - b);
- return [k, `${arr[0][0]}~${arr.at(-1)[0]}`, brr[0]];
- }).sort((a, b) => order.indexOf(a[0]) - order.indexOf(b[0]));
- res.unshift(['学科', '考场范围', '尾考场人数']);
- with (Sheets('考场').Range('T1').Resize(res.length, res[0].length)) {
- CurrentRegion.Clear();
- Value2 = res;
- Borders.LineStyle = xlContinuous;
- HorizontalAlignment = xlHAlignCenter;
- }
- }
复制代码 |
评分
-
1
查看全部评分
-
|