Greasy Fork镜像 支持简体中文。

读取excel文件

读取excel文件,生成excel文件!

  1. // ==UserScript==
  2. // @name 读取excel文件
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.4
  5. // @description 读取excel文件,生成excel文件!
  6. // @author BigHan
  7. // @match https://www.tianyancha.com/*
  8. // @match https://www.qcc.com/*
  9. // @icon https://www.google.com/s2/favicons?sz=64&domain=gf.qytechs.cn
  10. // @grant GM_xmlhttpRequest
  11. // @connect *
  12. // @license BH
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17. function import_js(src) {
  18. let script = document.createElement('script');
  19. script.src = src;
  20. document.head.appendChild(script);
  21. }
  22. import_js('https://unpkg.com/xlsx/dist/xlsx.full.min.js');
  23. var getUrl = 'https://www.tianyancha.com/search?key=';
  24. //var getUrl = 'https://www.qcc.com/web/search?key=';
  25.  
  26. var input = document.createElement('input');
  27. input.type = 'file';
  28. input.id = 'excel';
  29. input.style.width="80px";
  30. input.style.hight="60px";
  31. input.style.position="fixed";
  32. input.style.top="80%";
  33. input.style.right="5px";
  34. input.style.align="center";
  35. input.style.borderRadius = '15px';
  36. input.style.background="rgb(222 225 205)";
  37.  
  38. // 读取本地excel文件,读取Excel文件对象
  39. function readWorkbookFromLocalFile(file, callback) {
  40. var reader = new FileReader();
  41. reader.onload = function(e) {
  42. var data = e.target.result;
  43. var workbook = XLSX.read(data, {type: 'binary'});
  44. if(callback) callback(workbook);
  45. };
  46. reader.readAsBinaryString(file);
  47. }
  48.  
  49. // 转成cvs 要注意Execel表格内容不能包含英文的,不然解析出来的数据格式会有问题
  50. let args ;
  51. var times = 0;
  52. var resultData = [];
  53. var bacData = [];
  54. function readWorkbook(workbook) {
  55. var sheetNames = workbook.SheetNames; // 工作表名称集合
  56. sheetNames.forEach((sheet)=>{
  57. var worksheet = workbook.Sheets[sheet];
  58. var jsonData = XLSX.utils.sheet_to_json(worksheet);
  59. bacData = [ ].concat(jsonData);
  60. for (var i = 0; i < jsonData.length; i++) {
  61. if(i%30 == 0){
  62. console.log('当前循环次数 : '+i);
  63. }
  64. let row = jsonData[i];
  65. args = row['qymc'];
  66. if (typeof(args) == "undefined"){
  67. args = row['id'];
  68. }
  69. var state = sendRequest(row);
  70. if(state == 0){
  71. break;
  72. }else{
  73. resultData.push(row);
  74. bacData.splice(0, 1);
  75. }
  76. }
  77. createExcel(resultData);
  78. })
  79. }
  80.  
  81. //发请请求
  82. function sendRequest(row){
  83. var request = new XMLHttpRequest();
  84. var url = getUrl+args+'&sessionNo=1686808787.41924975';
  85. request.open('GET',url, false);
  86. //overrideMimeType(); //用来强制解析 response 为 XML
  87. request.overrideMimeType('text/xml');
  88. request.send(null);
  89. if (request.status === 200) {
  90. var result = request.responseXML;
  91. if(result != null){
  92. var list = result.getElementsByClassName('index_search-item-center__Q2ai5');
  93. if(list.length > 0){
  94. var nameSource = list[0].getElementsByClassName('index_name__qEdWi');
  95. var dateSource = list[0].getElementsByClassName('index_info-col__UVcZb');
  96. var name = nameSource[0].textContent;
  97. var date = dateSource[2].textContent;
  98. row['nqymc'] = name;
  99. row['date'] = date;
  100. }else{
  101. row['nqymc'] = '';
  102. row['date'] = '';
  103. }
  104. return '1';
  105. }else{
  106. return '0';
  107. }
  108. }
  109. }
  110.  
  111. //生成Excel文件
  112. function createExcel(data){
  113. if(data.length > 0){
  114. let nowTime = timestampToTime()
  115. // 导出的表格名称
  116. const filename =nowTime+'结果.xlsx'
  117. // Excel第一个sheet的名称
  118. const ws_name = 'Sheet1'
  119. const wb = XLSX.utils.book_new()
  120. const ws = XLSX.utils.json_to_sheet(data);
  121. XLSX.utils.book_append_sheet(wb, ws, ws_name) // 将数据添加到工作薄
  122. XLSX.writeFile(wb, filename) // 导出Excel
  123. }
  124.  
  125. //10秒后重新请求剩余数据
  126. setTimeout(() => {
  127. if(bacData.length>0){
  128. console.log('执行次数 : '+times);
  129. resultData = [];
  130. times += 1;
  131. try {
  132. bacData.forEach((row)=>{
  133. args = row['qymc'];
  134. if (typeof(args) == "undefined"){
  135. args = row['id'];
  136. }
  137. var state = sendRequest(row);
  138. if(state == 0){
  139. throw new Error("error");
  140. }else{
  141. resultData.push(row);
  142. bacData.splice(0, 1);
  143. }
  144. })
  145. createExcel(resultData);
  146. } catch (e) {
  147. createExcel(resultData);
  148. }
  149. }
  150. },60000);
  151. }
  152. function timestampToTime() {
  153. let d = new Date();
  154. let y = d.getFullYear();
  155. let m = d.getMonth()+1;
  156. let d1 = d.getDate();
  157. let h = d.getHours();
  158. let s = d.getMinutes();
  159. return ""+y + m + d1 + h + s;
  160. }
  161.  
  162.  
  163. setTimeout(() => {
  164. document.body.appendChild(input);
  165. document.querySelector('#excel').onchange = function (e) {
  166. let file = e.target.files[0];
  167. readWorkbookFromLocalFile(file, function(workbook) {
  168. readWorkbook(workbook);
  169. });
  170. }
  171. }, 1000);
  172. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址