你在运营公众号的时候是否会遇到需要统计每篇文章下面的署名呢?

在社团中我就做过这种工作的时候,在以前我们都是发在线表格让大家去填写,但是这样非常耗费时间。

有的同学可能忘了自己编辑了什么推文,即使记得,一个人填写表格也要5分钟,10个人就是50分钟了。

而用程序只需要几分钟就好了,下面一起来和酷酷看看~

【记者团】微信公众号文章生成作品表_分表

【记者团】微信公众号文章生成作品表_公众号_02

操作步骤

前期准备(重点):推文下方在署名时,请如下图所示填写:使用中文冒号,姓名与姓名之间使用空格,否则数据会有遗漏。

【记者团】微信公众号文章生成作品表_分表_03

步骤一:生成excel作品表

1、登录微信公众号后台,打开【发表记录】。

【记者团】微信公众号文章生成作品表_html_04

  1. Ctrl+S或右击网页,保存【html网页文件】。

【记者团】微信公众号文章生成作品表_公众号_05

3、记住html文件保存路径(最上面红色方框),并设置【html文件名称】。

注意:html文件由序号1~n,html文件名称格式数字+公众号.html,如1公众号.html,注意文件名称不要搞混了。

【记者团】微信公众号文章生成作品表_公众号_06

4、点击第2页的文章发表记录,重复步骤2、步骤3的操作。

【记者团】微信公众号文章生成作品表_公众号_07

5、效果图:下载好所有html文件

【记者团】微信公众号文章生成作品表_html_08

6、运行程序:在当前文件夹下(注意:html文件和exe文件在同一文件夹下)双击运行程序微信公众号文章生成excel作品表.exe此程序会自动生成excel公众号文章作品表。

程序:公众号“小知识酷”后台回复“230828公众号excel作品表”获取exe文件

【记者团】微信公众号文章生成作品表_html_09

7、当我们在运行exe文件时会出现下方需要输入的内容。
其中输入3-3表示只生成3公众号.html里面的作品表;
输入1-2表示只生成1公众号.html2公众号.html里面的作品表;
输入2-4表示只生成2公众号.html3公众号.html4公众号.html里面的作品表。

【记者团】微信公众号文章生成作品表_html_10

8、打开excel文件查看

【记者团】微信公众号文章生成作品表_html_11

手动制作作品表(exe无法运行请看这)
  • 注意:excel可以正常生成请跳到步骤二(往下查看)
  1. 当我们没有exe文件或exe文件无法正常运行时,此时前面的步骤就无效了。现在我们就只能手动制作在线文档版的作品表,操作如下。
  2. 登录到微信公众号后台——点击【内容分析】——【单篇群发】——设置时间段——【下载数据明细】

导出Excel 如下图黑色箭头,下面有一个绿色图标导出Excel是由“美编助手”插件提供,否则不会显示。(微信公众号后台回复“”获取相关教程)

【记者团】微信公众号文章生成作品表_分表_12

  1. 在浏览器中按Ctrl+J查看下载的软件,并打开excel表格。

【记者团】微信公众号文章生成作品表_html_13

【记者团】微信公众号文章生成作品表_html_14

  1. 删除C列~O列(教程:百度“excel删除指定列”)

【记者团】微信公众号文章生成作品表_分表_15

  1. 修改表格如下图,一定要从C列开始的顺序是编辑、校对、文字、图片、视频、音频、学生主编(7个工作内容都不能少)

【记者团】微信公众号文章生成作品表_分表_16

  1. 点击表格中的链接,此时浏览器会打开一个网页(或将链接复制到浏览器地址栏中,如图2红色方框)。

【记者团】微信公众号文章生成作品表_分表_17

【记者团】微信公众号文章生成作品表_分表_18

  1. 在“在线文档”中填写日期所对应的推文名称、推文署名等。
  2. 【记者团】微信公众号文章生成作品表_分表_19

  3. 当我们制作完成作品表后可以实现2种功能:积分统计(工作量统计,功能一)和稿费统计(功能二)。

步骤二

功能一:积分统计
  1. 根据步骤一,我们制作了微信作品表,打开excel表格。在“官微作品表”中删除无效的数据(如下红色方框),这些数据会影响后面的统计。

【记者团】微信公众号文章生成作品表_html_11

  1. 点击【开发工具】—【WPS宏编辑器】,将下面代码复制到新打开的窗口中。

【记者团】微信公众号文章生成作品表_分表_21

【记者团】微信公众号文章生成作品表_html_22

/*
名称:积分统计
作用:微信公众号作品表统计每个人的工作量
链接:
更新时间:2023年8月26日21:01:59
*/
function 统计学生所有积分() {
	// sheet1SumLow:“官微作品表”的总行数
    var sheet1SumLow = Worksheets("官微作品表").UsedRange.Cells.Rows.Count;
    alert("官微作品表总行数:" + sheet1SumLow);
    
    // 新建工作表名称为“积分表”
    var scoreTable = "积分表"
    var sht = Worksheets.Add(null, Sheets(Sheets.Count));
    sht.Name = scoreTable;

    // 设置表格标题
    var day = new Date();
    var month = day.getMonth() + 1;
    Sheets.Item(scoreTable).Range("A1").Value2 = "记者团" + (month - 1) + "月份积分表";
    /// 设置表格标题颜色为红色
    Range("A1").Select();
    (obj => {
        obj.Color = 255;
    })(Selection.Font)

    //“积分表”中录入基本职责
    var jobName = ["姓名", "编辑", "校对", "文字", "图片", "视频", "音频", "学生主编", "抖音", "活动", "总积分"];
    for (var letter = 65, i = 0; letter <= 77; letter++, i++) {
        Sheets.Item(scoreTable).Range(String.fromCharCode(letter) + "2").Value2 = jobName[i];
    }

    // 获取“官微作品表”和“抖音作品表”中所有的姓名
    let names = []; //存储所有的姓名
    ///“官微作品表”中获取所有姓名
    let arr = Sheets.Item("官微作品表").Range("A3:I" + sheet1SumLow).Value2 // 选中“官微作品表A3:I22”
    for (let j = 2; j <= 8; j++) { //获取“官微作品表”中第3列~第9列中的姓名
        for (let i = 0; i < arr.length; i++) {
            let name = arr[i][j];
            if (name != null) {
                if (name.includes("")) { // 判断是否有姓名
                    let n = name.split(" "); //对当前单元格姓名进行分割
                    for (let k = 0; k < n.length; k++) {
                        if (!(names.includes(n[k]))) {
                            names.push(n[k]);
                        }
                    }
                }
            }
        }
    }
    ///“抖音作品表”中获取所有姓名
    var tiktokSumLow = Worksheets("抖音作品表").UsedRange.Cells.Rows.Count; // “抖音作品表”总行数
    alert("抖音作品表总行数:" + tiktokSumLow)
    arr = Sheets.Item("抖音作品表").Range("A3:C" + tiktokSumLow).Value2 // 选中“抖音作品表A3:I22”
    for (let j = 2; j <= 2; j++) { //获取“抖音作品表”中第3列中的姓名
        for (let i = 0; i < arr.length; i++) {
            let name = arr[i][j];
            if (name != null) {
                if (name.includes("")) { // 判断是否有姓名
                    let n = name.split(" "); //对当前单元格姓名进行分割
                    for (let k = 0; k < n.length; k++) {
                        if (!(names.includes(n[k]))) {
                            names.push(n[k]);
                        }
                    }
                }
            }
        }
    }
    /// 选择“积分表”A3~AmaxNun,names[j]所有姓名赋值给A列
    for (var i = 3, j = 0; names[j] != null; i++) {
        Sheets.Item(scoreTable).Range("A" + i).Value2 = names[j++];
    }

    //统计每个学生的官微积分
    var nameLen = names.length; //积分表所有的行数
    alert(nameLen)
    /// 编辑、校对、文字、图片、视频、音频、学生主编积分分别如下:
    var cardNum = [1,1,1,1,1,1,1];
	
	///遍历“积分表”A3~maxLow,得到所有的姓名
    for (var i = 3; i <= nameLen + 2; i++) { 
        //遍历“积分表”B2~H2,统计各个职责中每个姓名出现的次数,low“积分表”的列,integRow“官微表”的列
        for (var low = 66, integRow = 67, cardIndex = 0; low != 73; low++, integRow++, cardIndex++) {
            var integration = 0; //每个名字出现的次数
            // 遍历“官微作品表”中所有的行A3~Amax
            for (var j = 3; j <= sheet1SumLow; j++) {
                //for (var k = 3; k <= nameLen + 2; k++) {
                var nameCell = Sheets.Item("官微作品表").Range(String.fromCharCode(integRow) + j).Value2; // 获取官微中每列出现的姓名值
                var cell = Sheets.Item(scoreTable).Range("A" + i).Value2; //获取积分表的姓名  
                for (var a = 0; nameCell != null && nameCell[a] != null && nameCell[a + 1] != null; a++) {
                    for (var b = 0; cell != null && cell[b] != null; b++) {
                        if (nameCell[a] == cell[b] && nameCell[a + 1] == cell[b + 1]) {
                            integration++;
                            a++;
                            b++;
                        }
                    }
                }
            }
            // 每列的积分赋值:“积分表”单个工作的积分
            Sheets.Item(scoreTable).Range(String.fromCharCode(low) + i).Value2 = integration * cardNum[cardIndex];
        }
        cardIndex = 0;
    }

    //统计抖音的积分
    for (var i = 3; i <= nameLen + 2; i++) { //遍历积分表A3~A100,得到所有姓名列
        var integration = 0;
        for (integRow = 67; integRow != 69; integRow++) { //low遍历积分表B2~H2
            for (var j = 3; j <= tiktokSumLow; j++) {
                var nameCell = Sheets.Item("抖音作品表").Range(String.fromCharCode(integRow) + j).Value2; // 获取“抖音作品表”中每列的姓名
                var cell = Sheets.Item(scoreTable).Range("A" + i).Value2; //获取“积分表”表头的姓名  
                for (var a = 0; nameCell != null && nameCell[a] != null && nameCell[a + 1] != null; a++) {
                    var breakNum = 0;
                    for (var b = 0; cell != null && cell[b] != null; b++) {
                        if (nameCell[a] == cell[b] && nameCell[a + 1] == cell[b + 1]) {
                            integration++;
                            a++;
                            b++;
                        }
                    }
                }
            }
            // 抖音列每个人的积分
            Sheets.Item(scoreTable).Range("I" + i).Value2 = integration * 1;
        }
    }

    //“积分表”K列计算总积分
    for (var i = 3; i <= nameLen + 2; i++) {
        Sheets.Item(scoreTable).Range("K" + i).Value2 = "=sum(B" + i + ":J" + i + ")";
    }
}
代码说明

1、如图18行jobName是积分表的标题,在表格中处于第2行A2:L2 2、如图24行studentName是组织成员的姓名,
3、如图31行cardNum是每项工作内容的积分

【记者团】微信公众号文章生成作品表_分表_23

  1. F5执行代码,就会出现一个新的表格“积分表”,里面会自动统计每个人的工作量。
功能二:稿费统计
  1. 根据步骤一,我们制作了微信作品表,打开excel表格。在“官微作品表”中删除无效的数据(如下红色方框),这些数据会影响后面的统计。

【记者团】微信公众号文章生成作品表_html_11

  1. 文字图片列后面分别插入F列、H列,并修改标题为字数张数
  2. 【记者团】微信公众号文章生成作品表_html_25

  3. 通过在线文档让大家统计文字的字数和图片的张数。

  4. Ctrl+H替换“官微作品表”和“抖音作品表中”的2个空格为1个空格,直到查找为0。(避免统计空格的稿费 )

  5. 查看编辑、文字、图片、视频、音频、抖音列中的姓名中是否有多余的空格,如下图红色方框,如果姓名前面或后面有空格,单元格左上角会有绿色小三角图标。
  6. 【记者团】微信公众号文章生成作品表_分表_26

  7. 点击【开发工具】—【WPS宏编辑器】,将下面代码复制到新打开的窗口中,并按F5。(运行下方代码,代码会自动统计每个人的稿费)

【记者团】微信公众号文章生成作品表_分表_21

【记者团】微信公众号文章生成作品表_html_28

/*
名称:稿费统计
作用:计算稿费和工作量及任务次数
链接:
更新时间:2023年10月27日11:30:25(计算稿费和工作量及任务次数)
2023年10月27日12:19:08
*/


/* 
function:计算单个人的稿费合计
name:名字在第几列
value:统计的数值在第几列
*/
function price(sheetName, dict, nameRow, valueRow, work) {
    //sheet1SumLow:“官微作品表”的总行数
    var sheet1SumLow = Worksheets(sheetName).UsedRange.Cells.Rows.Count;
    //alert("官微作品表总行数:" + sheet1SumLow);

    let arr = Sheets.Item(sheetName).Range("A3:Z" + String(sheet1SumLow)).Value2
    let scores = {};
    for (let i = 0; i < arr.length; i++) {
        let name = arr[i][nameRow]; //当前表中有哪些姓名
        let score = arr[i][valueRow]; //姓名后面的单任务稿费

        if (name != null) {
            if (name.includes("")) { // 判断是否有姓名
                let names = name.split(" "); //对当前单元格姓名进行分割                
                let avgScore = Math.round(score / names.length * 100) / 100; //平均分
                //                works[work] = avgScore;
                // console.log(works[work]);
                for (let j = 0; j < names.length; j++) {
                    let n = names[j]; //单个单元格每个人的姓名                    
                    //console.log(n + "," + avgScore)
                    //console.log(n + "," +dict[n])
                    if (dict[n] == 0 || dict[n] == undefined) {
                        let works = { "编辑": 0, "文字": 0, "图片": 0, "视频": 0, "音频": 0, "抖音": 0, "编辑num": 0, "文字num": 0, "图片num": 0, "视频num": 0, "音频num": 0, "抖音num": 0 };
                        dict[n] = works;
                        dict[n][work] = avgScore;
                        dict[n][String(work) + "num"] += 1;
                        //console.log(n + "," +dict[n] + "," +avgScore)
                    } else {
                        dict[n][work] += avgScore;
                        dict[n][String(work) + "num"] += 1;
                    }
                    //                    console.log(i + "、" + n + "、" + work + "、" + dict[n][work]);
                }
            }
        }
    }

    //	输出结果
    //    var i = 3;
    //    for (var key in dict) {
    //        // 行数、姓名、单个任务的稿费
    //        //console.log((i - 2) + "、" + key + ":" + dict[key])
    //        //console.log(key + ":" + dict[key]);
    //        Sheets.Item("稿费代发表").Range("A" + i).Value2 = (i - 2); //序号
    //        Sheets.Item("稿费代发表").Range("B" + i).Value2 = key; //姓名
    //        //Sheets.Item("稿费代发表").Range("C" + i).Value2 = "=SUM(D" + i + ":H" + i + ")"; //
    //        Sheets.Item("稿费代发表").Range("C" + i).Value2 = parseInt(dict[key]); //总计
    //        i++;
    //    }
}

function main() {
    // “官微作品表”中插入“稿费”列
    Columns(4).Insert();
    Sheets.Item("官微作品表").Range("D2").Value2 = "稿费";
    Columns(8).Insert()
    Sheets.Item("官微作品表").Range("H2").Value2 = "稿费";
    Columns(11).Insert()
    Sheets.Item("官微作品表").Range("K2").Value2 = "稿费";
    Columns(13).Insert()
    Sheets.Item("官微作品表").Range("M2").Value2 = "稿费";
    Columns(15).Insert()
    Sheets.Item("官微作品表").Range("O2").Value2 = "稿费";

    /// “官微作品表”中插入统计工作量稿费
    var sheet1SumLow = Worksheets("官微作品表").UsedRange.Cells.Rows.Count; //作品表初始化时的总行数
    for (let i = 3; i <= sheet1SumLow; i++) {
        Sheets.Item("官微作品表").Range("D" + i).Value2 = "=IF(COUNTA(C" + i + ")<>0,30,0)"; //编辑价格
        Sheets.Item("官微作品表").Range("H" + i).Value2 = "=IF(COUNTA(F" + i + ")<>0,G" + i + "/10,0)"; //文字价格 "=G" + i + "/10"
        Sheets.Item("官微作品表").Range("K" + i).Value2 = "=IF(COUNTA(I" + i + ")<>0,J" + i + "*10,0)"; //图片价格 =J" + i + "*10
        Sheets.Item("官微作品表").Range("M" + i).Value2 = "=IF(COUNTA(L" + i + ")<>0,80,0)"; //视频价格
        Sheets.Item("官微作品表").Range("O" + i).Value2 = "=IF(COUNTA(N" + i + ")<>0,50,0)"; //音频价格
    }

    /// 合计行:计算所有稿费合
    Sheets.Item("官微作品表").Range("A" + (sheet1SumLow + 1)).Value2 = "总计";
    Sheets.Item("官微作品表").Range("B" + (sheet1SumLow + 1)).Value2 = "=SUM(D" + (sheet1SumLow + 1) + ":P" + (sheet1SumLow + 1) + ")"; //总计
    //Sheets.Item("官微作品表").Range("C" + (sheet1SumLow  + 1)).Value2 = "=SUM(D" + (sheet1SumLow  + 1) + ":N" +(sheet1SumLow +1)+")"; //总计
    Sheets.Item("官微作品表").Range("D" + (sheet1SumLow + 1)).Value2 = "=SUM(D1:D" + sheet1SumLow + ")"; //编辑稿费
    Sheets.Item("官微作品表").Range("H" + (sheet1SumLow + 1)).Value2 = "=SUM(H1:H" + sheet1SumLow + ")"; //文字稿费
    Sheets.Item("官微作品表").Range("K" + (sheet1SumLow + 1)).Value2 = "=SUM(K1:K" + sheet1SumLow + ")"; //图片稿费
    Sheets.Item("官微作品表").Range("M" + (sheet1SumLow + 1)).Value2 = "=SUM(M1:M" + sheet1SumLow + ")"; //视频稿费
    Sheets.Item("官微作品表").Range("O" + (sheet1SumLow + 1)).Value2 = "=SUM(O1:O" + sheet1SumLow + ")"; //音频稿费

    /// 设置“官微作品表”总计行为红色字体
    Range("A" + (sheet1SumLow + 1) + ":P" + (sheet1SumLow + 1)).Select();
    (obj => {
        obj.Color = 255;
    })(Selection.Font)

    // 计算“抖音作品表”中的稿费
    Sheets.Item("抖音作品表").Range("D2").Value2 = "稿费";
    var sheet2SumLow = Worksheets("抖音作品表").UsedRange.Cells.Rows.Count; //作品表初始化时的总行数
    for (let i = 3; i <= sheet2SumLow; i++) {
        Sheets.Item("抖音作品表").Range("D" + i).Value2 = "=IF(COUNTA(C" + i + ")<>0,80,0)"; //抖音作品表稿费列
    }

    /// 计算稿费合
    Sheets.Item("抖音作品表").Range("A" + (sheet2SumLow + 1)).Value2 = "总计";
    Sheets.Item("抖音作品表").Range("B" + (sheet2SumLow + 1)).Value2 = "=SUM(D3:D" + sheet2SumLow + ")"; //音频稿费
    Sheets.Item("抖音作品表").Range("D" + (sheet2SumLow + 1)).Value2 = "=SUM(D3:D" + sheet2SumLow + ")"; //音频稿费

    //// 设置“官微作品表”总计行为红色字体
    Range("A" + (sheet2SumLow + 1) + ":D" + (sheet2SumLow + 1)).Select();
    (obj => {
        obj.Color = 255;
    })(Selection.Font)

    // 创建新的工作表“稿费代发表”
    var shtName = "稿费代发表"
    var sht = Worksheets.Add(null, Sheets(Sheets.Count));
    sht.Name = shtName;


    // 设置表格标题
    var day = new Date();
    var month = day.getMonth() + 1;
    Sheets.Item("稿费代发表").Range("A1").Value2 = "记者团" + (month - 1) + "月份积分表";
    /// 设置表格标题颜色为红色
    Range("A1:E1").Select();
    (obj => {
        obj.Color = 255;
    })(Selection.Font)

    //录入基本职责
    var jobName = ["序号", "姓名", "总计", "学号", "备注", "编辑", "文字", "图片", "视频", "音频", "抖音", "编辑", "文字", "图片", "视频", "音频", "抖音"];
    for (var letter = 65, i = 0; letter <= 89; letter++, i++) { //从A2到E2
        Sheets.Item("稿费代发表").Range(String.fromCharCode(letter) + "2").Value2 = jobName[i];
    }

    // 分别统计编辑、文字等单个稿费,并统计总和
    var dict = {};
    price("官微作品表", dict, 2, 3, "编辑");
    price("官微作品表", dict, 5, 7, "文字");
    price("官微作品表", dict, 8, 10, "图片");
    price("官微作品表", dict, 11, 12, "视频");
    price("官微作品表", dict, 13, 14, "音频");
    price("抖音作品表", dict, 2, 3, "抖音");
    var i = 3;
    for (var key in dict) {
        // 行数、姓名、单个任务的稿费
        //        console.log((i - 2) + "、" + key + ":" + dict[key]+ ":" + dict[key][])
        //console.log(key + ":" + dict[key]);
        Sheets.Item("稿费代发表").Range("A" + i).Value2 = (i - 2); //序号
        Sheets.Item("稿费代发表").Range("B" + i).Value2 = key; //姓名
        Sheets.Item("稿费代发表").Range("C" + i).Value2 = "=SUM(F" + i + ":K" + i + ")"; //总计
        //Sheets.Item("稿费代发表").Range("C" + i).Value2 = "=SUM(D" + i + ":H" + i + ")"; //
        Sheets.Item("稿费代发表").Range("F" + i).Value2 = parseInt(dict[key]["编辑"]);
        Sheets.Item("稿费代发表").Range("G" + i).Value2 = parseInt(dict[key]["文字"]);
        Sheets.Item("稿费代发表").Range("H" + i).Value2 = parseInt(dict[key]["图片"]);
        Sheets.Item("稿费代发表").Range("I" + i).Value2 = parseInt(dict[key]["视频"]);
        Sheets.Item("稿费代发表").Range("J" + i).Value2 = parseInt(dict[key]["音频"]);
        Sheets.Item("稿费代发表").Range("K" + i).Value2 = parseInt(dict[key]["抖音"]);
        Sheets.Item("稿费代发表").Range("L" + i).Value2 = parseInt(dict[key]["编辑num"]);
        Sheets.Item("稿费代发表").Range("M" + i).Value2 = parseInt(dict[key]["文字num"]);
        Sheets.Item("稿费代发表").Range("N" + i).Value2 = parseInt(dict[key]["图片num"]);
        Sheets.Item("稿费代发表").Range("O" + i).Value2 = parseInt(dict[key]["视频num"]);
        Sheets.Item("稿费代发表").Range("P" + i).Value2 = parseInt(dict[key]["音频num"]);
        Sheets.Item("稿费代发表").Range("Q" + i).Value2 = parseInt(dict[key]["抖音num"]);

        i++; //行数
    }

    var endNum = Object.keys(dict).length + 3;
    Sheets.Item("稿费代发表").Range("A" + endNum).Value2 = "总计";
    Sheets.Item("稿费代发表").Range("B" + endNum).Value2 = "=SUM(C1:C" + (endNum - 1) + ")";
    Sheets.Item("稿费代发表").Range("C" + endNum).Value2 = "=SUM(C1:C" + (endNum - 1) + ")";
    Sheets.Item("稿费代发表").Range("E3:E" + (endNum - 1)).Value2 = "学生";
    Sheets.Item("稿费代发表").Range("F" + endNum).Value2 = "=SUM(F1:F" + (endNum - 1) + ")"; //编辑总额
    Sheets.Item("稿费代发表").Range("G" + endNum).Value2 = "=SUM(G1:G" + (endNum - 1) + ")"; //文字总额
    Sheets.Item("稿费代发表").Range("H" + endNum).Value2 = "=SUM(H1:H" + (endNum - 1) + ")"; //图片总额
    Sheets.Item("稿费代发表").Range("I" + endNum).Value2 = "=SUM(I1:I" + (endNum - 1) + ")"; //视频总额
    Sheets.Item("稿费代发表").Range("J" + endNum).Value2 = "=SUM(J1:J" + (endNum - 1) + ")"; //音频总额
    Sheets.Item("稿费代发表").Range("K" + endNum).Value2 = "=SUM(K1:K" + (endNum - 1) + ")"; //抖音总额

    Sheets.Item("稿费代发表").Range("L" + endNum).Value2 = "=SUM(L1:L" + (endNum - 1) + ")"; //编辑次数
    Sheets.Item("稿费代发表").Range("M" + endNum).Value2 = "=SUM(M1:M" + (endNum - 1) + ")"; //文字次数
    Sheets.Item("稿费代发表").Range("N" + endNum).Value2 = "=SUM(N1:N" + (endNum - 1) + ")"; //图片次数
    Sheets.Item("稿费代发表").Range("O" + endNum).Value2 = "=SUM(O1:O" + (endNum - 1) + ")"; //视频次数
    Sheets.Item("稿费代发表").Range("P" + endNum).Value2 = "=SUM(P1:P" + (endNum - 1) + ")"; //音频次数
    Sheets.Item("稿费代发表").Range("Q" + endNum).Value2 = "=SUM(Q1:Q" + (endNum - 1) + ")"; //抖音次数
    /// 设置表格标题颜色为红色
    Range("A" + endNum + ":K" + endNum).Select();
    (obj => {
        obj.Color = 255;
    })(Selection.Font)
}
Other

微信公众号文章生成excel作品表

'''
名称:微信公众号文章生成作品表
作用:微信公众号文章生成excel作品表
链接:
更新时间:2023年8月26日20:56:48
'''
from asyncio.windows_events import NULL
from doctest import Example
import importlib
from pathlib import Path
from lxml import etree
import re
from urllib import request, response
import requests 
from urllib import request
import re #进行数据清洗要导入此模块
from lxml import etree
import xlsxwriter
from asyncio import sleep
import xlwt
import xlsxwriter 
from datetime import date,datetime
from openpyxl import load_workbook
import time
import os
import sys
import time, datetime
from datetime import datetime

# 获取所有的推文链接
def GetSiteList(start, end,path):
  siteLists = []
  print("\n程序正在运行...")
  for i in range(start, end):
    parser = etree.HTMLParser(encoding='utf-8')
    try:
      tree = etree.parse(path+str(i)+"公众号.html", parser=parser)
    except Exception as result:
      print("错误:你保存的html文件名称错误,正确文件名称为:1.html、2.html、3.html,请重新运行程序。")
      pass 

    html = etree.tostring(tree,encoding="utf-8").decode()
    result = tree.xpath("//*[@class='weui-desktop-mass-appmsg__title']/@href")
    siteLists.extend(result)
  return siteLists

# 获取所有推文中的责任姓名
def GetName(siteList,path):
  headers = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36 Edg/105.0.1343.33"}
  
  # 创建表格
  workbook = xlsxwriter.Workbook(path+str(datetime.today().date())+'官微每月作品表.xlsx')
  worksheet = workbook.add_worksheet("官微作品表")
  worksheet.merge_range('A1:I1',"记者团官方微信公众号 每月作品表汇总")
  bold = workbook.add_format({'bold': True,"align":"center"})
  worksheet.write('A1', '记者团官方微信公众号 每月作品表汇总', workbook.add_format({'bold': True,"size":15,"align":"center"}))
  worksheet.write('A2', '日期', bold)
  worksheet.write('B2', '选题名称', bold)
  worksheet.write('C2', '编辑', bold)
  worksheet.write('D2', '校对', bold)
  worksheet.write('E2', '文字', bold)
  worksheet.write('F2', '图片', bold)
  worksheet.write('G2', '视频', bold)
  worksheet.write('H2', '音频', bold)
  worksheet.write('I2', '学生主编', bold)
  worksheet.write('J2', '推文链接', bold)
  time.sleep(0.5)

  parser = etree.HTMLParser(encoding='utf-8')
  line = 2
  alignCenter = workbook.add_format({"align":"center"})
  for i in range(len(siteList)-1,0,-1):
    line = line + 1
    # dict = {"time":NULL, "activity":NULL, "edit":NULL, "text":NULL, "proofreading":NULL, "picture":0, "video":NULL}    
    reponse = request.urlopen(siteList[i]).read().decode()

    try:
      pat1 = r"var ct = \"(\d+)\""        
      date1 = re.search(pat1, reponse).group(1)
      date1 = int(date1)
      #转换为其他日期格式,如:"%Y-%m-%d %H:%M:%S"
      timeArray = time.localtime(date1)
      otherStyleTime = time.strftime("%m月%d日", timeArray)
      worksheet.write('A'+str(line), otherStyleTime,alignCenter)
      print(otherStyleTime,end=" ")
    except Exception as result:
      try:
        pat2 = r"window.ct = \'(\d+)\'"
        date2 = re.search(pat2, reponse).group(1)
        date2 = int(date2)
        timeArray2 = time.localtime(date2)
        otherStyleTime2 = time.strftime("%m月%d日", timeArray2)
        worksheet.write('A'+str(line), otherStyleTime2,alignCenter)
        print(otherStyleTime2,end=" ")
      except Exception as result:
        pass

    try:
      html = etree.HTML(reponse)        
      activity_name = html.xpath("//h1")[0].text.strip() #标题
      worksheet.write('B'+str(line), activity_name,alignCenter)
      print(activity_name)
    except Exception as result:
      pass

    try:
      bianJi = r"编辑:([\u4e00-\u9fa5].*?)<"
      bianJi = re.search(bianJi, reponse).group(1).replace(" "," ")
      worksheet.write('C'+str(line),bianJi,alignCenter)
        #print(bianJi)
    except Exception as result:
      pass

    try:
      jiaoDui = r"校对:([\u4e00-\u9fa5].*?)<"
      jiaoDui = re.search(jiaoDui, reponse).group(1).replace(" "," ")
      worksheet.write('D'+str(line),jiaoDui,alignCenter)
    #print(jiaoDui)
    except Exception as result:
      pass

    try:
      text = r"文字:([\u4e00-\u9fa5].*?)<"
      text = re.search(text, reponse).group(1).replace(" "," ")
      worksheet.write('E'+str(line),text,alignCenter)
      #print(text)
    except Exception as result:
      pass

    try:
      picture = r"图片:([\u4e00-\u9fa5].*?)<"
      picture = re.search(picture, reponse).group(1).replace(" "," ")
      worksheet.write('F'+str(line),picture,alignCenter)
      #print(picture)
    except Exception as result:
      pass

    try:
      video = r"视频:([\u4e00-\u9fa5].*?)<"
      video = re.search(video, reponse).group(1).replace(" "," ")
      worksheet.write('G'+str(line),video,alignCenter)
      #print(video)
    except Exception as result:
      pass

    try:
      audio = r"音频:([\u4e00-\u9fa5].*?)<"
      audio = re.search(audio, reponse).group(1).replace(" "," ")
      worksheet.write('H'+str(line),audio,alignCenter)
      #print(audio)
    except Exception as result:
      pass

    try:
      zhuBian = r"学生主编:([\u4e00-\u9fa5].*?)<"
      zhuBian = re.search(zhuBian, reponse).group(1).replace(" "," ")
      worksheet.write('I'+str(line),zhuBian,alignCenter)
      #print(zhuBian)
    except Exception as result:
      pass

    try:
      worksheet.write('J'+str(line), siteList[i])
    except Exception as result:
      #print("pass")
      pass
  # 关闭工作薄
  worksheet2 = workbook.add_worksheet("抖音作品表")
  worksheet2.merge_range('A1:I1',"记者团官方抖音作品表")
  bold = workbook.add_format({'bold': True,"align":"center"})
  worksheet.write('A1', '记者团官方微信公众号 每月作品表汇总', workbook.add_format({'bold': True,"size":15,"align":"center"}))
  worksheet2.write('A2', '日期', bold)
  worksheet2.write('B2', '选题名称', bold)
  worksheet2.write('C2', '拍摄/剪辑', bold)
  workbook.close()


if __name__ == '__main__':
  # 获取文件的路径
  if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
  elif __file__:
    application_path = os.path.dirname(__file__)

  path = application_path.replace("\\","/")+"/"
  print("程序来源于微信公众号【小知识酷】,后台回复“交流群”获取程序使用文档")
  print("更新时间:2023年8月26日20:57:07\nVersion:Beta1.3\n")
  print("注意正确的网页文件名称为:1公众号.html、2公众号.html、3公众号.html\n")

  minNum = input("请输入html文件起始文件标号(如整数1):")    
  maxNum = input("请输入html文件结束文件标号(如整数10):")

  # 获取当前文件夹下的所有html文件中文章的url
  getSiteList = GetSiteList(int(minNum),int(maxNum)+1, path)
  # print(len(getSiteList))
  GetName(getSiteList,path)
  print("\nExcel文件位置:"+path+"官微每月作品表.xlsx")
  input("\n程序运行完毕")
代码升级
  1. 获取文章末尾“出品”至“责编”区间的内容,删除无用的信息,留取职责+姓名

作者:@MrFlySand·飞沙