彰化一整天的論壇

 找回密碼
 立即註冊
查看: 1659|回復: 10

可選範圍+答案類型+讀入工作表+固定網址+選項亂數

[複製鏈接]
發表於 2021-5-24 20:45:28 | 顯示全部樓層 |閱讀模式
本帖最後由 imingho 於 2021-6-11 15:04 編輯

自動選擇題題庫產生器 (可選範圍+答案類型+讀入工作表+選項亂數)
google_form_20210529.jpg


請建立複本再使用
https://docs.google.com/spreadsheets/d/1fMJJyKzAQcTNGe14haB1ZOlajen5TKehiMoZ_vR_tiE/copy


  1. function onOpen() {
  2.   //update
  3.   /*
  4.   彰化一整天的blog: http://blog.bestdaylong.com
  5.   彰化一整天的論壇: http://discuz.bestdaylong.com
  6.   
  7.   影音教學: https://youtu.be/3cCkcUXo-lc

  8.   作者:蔡明和
  9.   電子郵件:imingho@gmail.com
  10.   
  11.     v5.0 2021.05.29  第五版
  12.   
  13.   */
  14.   
  15.   var ss = SpreadsheetApp.getActiveSpreadsheet();

  16.   // These are the 2 menu entries
  17.   var menuEntries = [
  18.     {name: "自動產生選擇題題庫", functionName: "bestdaylong_auto_google_form_quiz"},

  19.     ];

  20.   // After defining the menu entries, then you define the menu itself
  21.   ss.addMenu("彰化一整天Blog工具", menuEntries);
  22.   
  23. }
  24. function bestdaylong_auto_google_form_quiz() {
  25.   //自動產生Google表單試題 by 彰化一整天blog
  26.   
  27.   //程式碼及討論 hhttp://discuz.bestdaylong.com/thread-39285-1-1.html
  28.   
  29.   //影音教學: https://youtu.be/3cCkcUXo-lc
  30.   
  31.   //儲存格格式 編號        題目        答案        選項1        選項2        選項3        選項4

  32.   
  33.   
  34.   var sheet=SpreadsheetApp.getActiveSheet();  //取得目前工作表

  35.   var exam = sheet.getRange("B1").getValue().toString(); //題庫工作表

  36.   var formUrl=sheet.getRange("B10").getValue().toString();

  37.   var startNum=sheet.getRange("B11").getValue();

  38.   var examSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(exam);
  39.   
  40.   var examname = sheet.getRange("B2").getValue().toString(); //考卷名稱

  41.   var form = FormApp.openByUrl(formUrl);

  42.   form.setTitle(examname); //設定試卷名稱

  43.   var examRequired=sheet.getRange("B12").getValue(); //是否必填


  44.   var AnswerRand=sheet.getRange("B13").getValue(); //答案是否亂數
  45.   

  46.   //清除之前記錄
  47.   var items = form.getItems();
  48.   
  49.   Logger.log("I="+items.length);

  50.   for (var i=items.length-1; i>=startNum-1; i--) {
  51.     form.deleteItem(i);
  52.   }
  53.   
  54.   
  55.   form.setIsQuiz(true);  //設定表單為考試

  56.   var m=examSheet.getLastColumn();//取得欄數
  57.   var n=sheet.getRange("B6").getValue();//取得筆數
  58.   var i,j;//迴圈變數   

  59.   var min,max;
  60.   var min=sheet.getRange("B4").getValue();
  61.   var max=sheet.getRange("B5").getValue();

  62.   var examType=sheet.getRange("B3").getValue();

  63.   var showExamNo=sheet.getRange("B7").getValue();  //是否顯示原題號

  64.   var showNo=sheet.getRange("B8").getValue();  //是否顯示題號

  65.   var QuestionType=sheet.getRange("B9").getValue();  //答案類型
  66.   
  67.   var score=100/n;  //計算每題分數
  68.   
  69.   var answer;//正確答案

  70.   var question_no=[];

  71.   question_no=get_rand(min,max,n);

  72.   var data;

  73.   
  74.   var OptionOffset=0;


  75.   
  76.   var exam_no;//取得題號
  77.   
  78.   Logger.log(question_no);

  79.   var t;
  80.   var t1;

  81.   for(i=0;i<n;i++){   //從第0筆開始讀取  
  82.     //var item = form.addListItem();//下拉選單
  83.     exam_no=question_no[i]+1;//轉換成第幾列
  84.     if(examType=="選擇題")
  85.       item = form.addMultipleChoiceItem();//選擇題
  86.     else
  87.       item = form.addListItem();//下拉式選單

  88.     var data="";
  89.     if(showNo=="是")
  90.     {
  91.         data=(i+1)+'.';

  92.     }
  93.     Logger.log(exam_no);
  94.     data+=examSheet.getRange(exam_no,2).getValue();
  95.     if(showExamNo=="是")
  96.       data+=',原題號('+examSheet.getRange(exam_no,1).getValue()+')';

  97.     Logger.log(data);

  98.     answer=parseInt(examSheet.getRange(exam_no,3).getValue(),10);
  99.     item.setTitle(data);





  100.     var answers=[];//設定答案選項

  101.       if(AnswerRand=="是")
  102.       {
  103.         //產一位移數數字1到3
  104.         OptionOffset=parseInt(3* Math.random())+1;
  105.       }

  106.     for(j=4;j<=m;j++){  //從第4欄往右讀取


  107.    
  108.       switch(QuestionType)
  109.       {
  110.       case "數字1.2.3.4.":
  111.         data=(j-3)+'.';
  112.         break;
  113.       case "數字(1)(2)(3)(4)":
  114.         data="("+(j-3)+')';
  115.         break;
  116.       case "英文(A)(B)(C)(D)":
  117.         data="("+String.fromCharCode(j-3+64)+')';
  118.         break;   
  119.       case "英文A.B.C.D.":   
  120.         data=String.fromCharCode(j-3+64)+'.';
  121.         break;
  122.       case "無任何提示":           
  123.         data="";
  124.         break;
  125.       }
  126.        t=(j-4+OptionOffset)%(m-4+1)+4;
  127.        data+=examSheet.getRange(exam_no,t).getValue(); //取得題目選項

  128.        //t1=(j+OptionOffset)%(m-4+1);
  129.        t1=(m-4+1+answer-OptionOffset-1)%(m-4+1);//計算位移後的答案
  130.        Logger.log(t+"-"+answer+"-"+OptionOffset+"-"+t1+"-"+data);
  131.        answers[j-4]=item.createChoice(data, t1==(j-4)); //陣列從0開始,儲存格是從1開始
  132.     }
  133.     item.setChoices(answers);//填入選項
  134.     if(examRequired=="是")
  135.        item.setRequired(true); //設為必填
  136.     item.setPoints(score);//設定每題分數
  137.   }
  138.   sheet.getRange("B16").setValue(form.getPublishedUrl());
  139.   sheet.getRange("B17").setValue(form.getEditUrl());
  140.   //Logger.log('公開網址: ' + form.getPublishedUrl());
  141.   //Logger.log('修改網址: ' + form.getEditUrl());  
  142.   Browser.msgBox('執行結果','公開網址: ' + form.getPublishedUrl()+'\\n修改網址: ' + form.getEditUrl(), Browser.Buttons.OK);
  143. }

  144. function add_form()
  145. {
  146.    
  147.   var sheet=SpreadsheetApp.getActiveSheet();  //取得目前工作表

  148.   var examname = sheet.getRange("B2").getValue().toString(); //題庫工作表

  149.   var field = sheet.getRange("B14").getValue().toString(); //欄位名稱

  150.   var form = FormApp.create(examname);  //建立表單

  151.   var fields=field.split(",");

  152.   for(var i=0;i<fields.length;i++)
  153.   {
  154.     var item=form.addTextItem();
  155.     item.setTitle(fields[i]);
  156.     item.setRequired(true); //設為必填
  157.   }
  158.   sheet.getRange("B10").setValue(form.getEditUrl());
  159.   sheet.getRange("B16").setValue(form.getPublishedUrl());
  160.   sheet.getRange("B17").setValue(form.getEditUrl());
  161.   Browser.msgBox('執行結果','公開網址: ' + form.getPublishedUrl()+'\\n修改網址: ' + form.getEditUrl(), Browser.Buttons.OK);
  162. }


  163. function get_rand(min,max,n)
  164. {
  165.   var question_no=[];
  166.   var m,temp;

  167.   for(i=min;i<=max;i++)
  168.   {
  169.     question_no[i-min]=i;
  170.   }
  171.   for(i=0;i<n;i++)
  172.   {
  173.     m=parseInt((max-min+1)* Math.random());
  174.     temp=question_no[i];
  175.     question_no[i]=question_no[m];
  176.     question_no[m]=temp;
  177.   }

  178.   return question_no;
  179. }

  180. function test_rand()
  181. {
  182.   var min,max;
  183.   var question_no=[];
  184.   var n,m,temp;
  185.   min=1;
  186.   max=20;
  187.   n=10;
  188.   for(i=min;i<=max;i++)
  189.   {
  190.     question_no[i-min]=i;
  191.   }
  192.   for(i=0;i<n;i++)
  193.   {
  194.     m=parseInt((max-min+1)* Math.random());
  195.     temp=question_no[i];
  196.     question_no[i]=question_no[m];
  197.     question_no[m]=temp;
  198.   }

  199.   Logger.log(question_no);
  200. }
  201. function test1()
  202. {
  203.    var sheet=SpreadsheetApp.getActiveSheet();  //取得目前工作表

  204.   var examSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("題庫");
  205.   
  206.   var examname = examSheet.getRange("A2").getValue().toString(); //考卷名稱
  207.   


  208.   var m=examSheet.getLastColumn();//取得欄數
  209.   var n=sheet.getRange("B5").getValue();//取得筆數
  210.   var i,j;//迴圈變數   

  211.   var min,max;
  212.   var min=sheet.getRange("B3").getValue();
  213.   var max=sheet.getRange("B4").getValue();
  214.   
  215.   var score=100/(n-1);  //計算每題分數

  216. }
  217. function GetSheetNames() {
  218.   //取得所有工作表到陣列
  219.   var out = new Array()
  220.   var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  221.   for (var i=0 ; i<sheets.length ; i++)
  222.   {
  223.     if(sheets[i].getName()!="參數設定")
  224.       out.push( [ sheets[i].getName() ] )
  225.   }
  226.   
  227.   return out
  228. }
  229. function GetExamSheet()
  230. {
  231.   //設定下拉選項
  232.    var data;
  233.    data=GetSheetNames();


  234.   var spreadsheet = SpreadsheetApp.getActive();
  235.   spreadsheet.getRange('B1').activate();
  236.   spreadsheet.getRange('B1').setDataValidation(SpreadsheetApp.newDataValidation()
  237.   .setAllowInvalid(true)
  238.   .requireValueInList(data, true)
  239.   .build());
  240. }

複製代碼





回復

使用道具 舉報

發表於 2021-6-10 18:53:42 | 顯示全部樓層
老師您好,想請教一下,我的題目有五個選項,我照著上面的程式碼修改後,發現我的每一題的E都變成A選項,其他選項也是順序往後移,請問該如何修正?
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-6-10 19:18:08 | 顯示全部樓層
vollkommen 發表於 2021-6-10 18:53
老師您好,想請教一下,我的題目有五個選項,我照著上面的程式碼修改後,發現我的每一題的E都變成A選項,其 ...

這個程式碼不用修改就可以用5個選項,可以把它修改過的程式嗎上傳嗎?

如何在discuz張貼程式碼
http://discuz.bestdaylong.com/thread-30239-1-1.html
回復 支持 反對

使用道具 舉報

發表於 2021-6-10 19:39:24 | 顯示全部樓層
一開始只有改上面的代號,發現選項答案對不上
才去改下面
  1. for(j=4;j<=m;j++){  //從第4欄往右讀取


  2.    
  3.       switch(QuestionType)
  4.       {
  5.       case "數字1.2.3.4.5.":
  6.         data=(j-3)+'.';
  7.         break;
  8.       case "數字(1)(2)(3)(4)(5)":
  9.         data="("+(j-3)+')';
  10.         break;
  11.       case "英文(A)(B)(C)(D)(E)":
  12.         data="("+String.fromCharCode(j-3+64)+')';
  13.         break;   
  14.       case "英文A.B.C.D.E.":   
  15.         data=String.fromCharCode(j-3+64)+'.';
  16.         break;
  17.       case "無任何提示":           
  18.         data="";
  19.         break;
  20.       }
  21.        t=(j+OptionOffset)%(m-4+1)+4;
  22.        data+=examSheet.getRange(exam_no,t).getValue(); //取得題目選項

  23.        //t1=(j+OptionOffset)%(m-4+1);
  24.        t1=(m-4+1+answer-OptionOffset)%(m-4+1);//計算位移後的答案
  25.        Logger.log(t+"-"+answer+"-"+OptionOffset+"-"+t1+"-"+data);
  26.        answers[j-4]=item.createChoice(data, t1==(j-4)); //陣列從0開始,儲存格是從1開始
複製代碼
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-6-10 20:52:53 | 顯示全部樓層
本帖最後由 imingho 於 2021-6-10 21:00 編輯
vollkommen 發表於 2021-6-10 19:39
一開始只有改上面的代號,發現選項答案對不上
才去改下面

請用原程式再執行看看,若有問題我會修改。程式碼請上傳全部.
回復 支持 反對

使用道具 舉報

發表於 2021-6-10 22:14:00 | 顯示全部樓層
我使用原程式執行時,發現五個選項加上空格跟詳解,全部都會變成選項共7個
抱歉下面是我修改的程式碼全部
  1. function onOpen() {
  2.   //update
  3.   /*
  4.   彰化一整天的blog: http://blog.bestdaylong.com
  5.   彰化一整天的論壇: http://discuz.bestdaylong.com
  6.   
  7.   影音教學: https://youtu.be/3cCkcUXo-lc

  8.   作者:蔡明和
  9.   電子郵件:imingho@gmail.com
  10.   
  11.     v5.0 2021.05.29  第五版
  12.   
  13.   */
  14.   
  15.   var ss = SpreadsheetApp.getActiveSpreadsheet();

  16.   // These are the 2 menu entries
  17.   var menuEntries = [
  18.     {name: "自動產生選擇題題庫", functionName: "bestdaylong_auto_google_form_quiz"},

  19.     ];

  20.   // After defining the menu entries, then you define the menu itself
  21.   ss.addMenu("彰化一整天Blog工具", menuEntries);
  22.   
  23. }
  24. function bestdaylong_auto_google_form_quiz() {
  25.   //自動產生Google表單試題 by 彰化一整天blog
  26.   
  27.   //程式碼及討論 hhttp://discuz.bestdaylong.com/thread-39285-1-1.html
  28.   
  29.   //影音教學: https://youtu.be/3cCkcUXo-lc
  30.   
  31.   //儲存格格式 編號        題目        答案        選項1        選項2        選項3        選項4        選項5        空格   詳解

  32.   
  33.   
  34.   var sheet=SpreadsheetApp.getActiveSheet();  //取得目前工作表

  35.   var exam = sheet.getRange("B1").getValue().toString(); //題庫工作表

  36.   var formUrl=sheet.getRange("B10").getValue().toString();

  37.   var startNum=sheet.getRange("B11").getValue();

  38.   var examSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(exam);
  39.   
  40.   var examname = sheet.getRange("B2").getValue().toString(); //考卷名稱

  41.   var form = FormApp.openByUrl(formUrl);

  42.   form.setTitle(examname); //設定試卷名稱

  43.   var examRequired=sheet.getRange("B12").getValue(); //是否必填


  44.   var AnswerRand=sheet.getRange("B13").getValue(); //答案是否亂數
  45.   

  46.   //清除之前記錄
  47.   var items = form.getItems();
  48.   
  49.   Logger.log("I="+items.length);

  50.   for (var i=items.length-1; i>=startNum-1; i--) {
  51.     form.deleteItem(i);
  52.   }
  53.   
  54.   
  55.   form.setIsQuiz(true);  //設定表單為考試

  56.   var m=examSheet.getLastColumn();//取得欄數
  57.   var n=sheet.getRange("B6").getValue();//取得筆數
  58.   var i,j;//迴圈變數   

  59.   var min,max;
  60.   var min=sheet.getRange("B4").getValue();
  61.   var max=sheet.getRange("B5").getValue();

  62.   var examType=sheet.getRange("B3").getValue();

  63.   var showExamNo=sheet.getRange("B7").getValue();  //是否顯示原題號

  64.   var showNo=sheet.getRange("B8").getValue();  //是否顯示題號

  65.   var QuestionType=sheet.getRange("B9").getValue();  //答案類型
  66.   
  67.   var score=100/n;  //計算每題分數
  68.   
  69.   var answer;//正確答案

  70.   var question_no=[];

  71.   question_no=get_rand(min,max,n);

  72.   var data;

  73.   
  74.   var OptionOffset=0;


  75.   
  76.   var exam_no;//取得題號
  77.   
  78. var reason;//詳解

  79.   var isComment;//是否有詳解
  80.   
  81.   //Logger.log(question_no);

  82.   //檢查是否有詳解
  83.   if(examSheet.getRange(1,m-1).getValue()=="" ||  examSheet.getRange(1,m).getValue()=="")
  84.     {  //有詳解
  85.         m=m-2;
  86.         isComment=true;
  87.     }

  88.   var t;
  89.   var t1;

  90.   for(i=0;i<n;i++){   //從第0筆開始讀取  
  91.     //var item = form.addListItem();//下拉選單
  92.     exam_no=question_no[i]+1;//轉換成第幾列
  93.     if(examType=="選擇題")
  94.       item = form.addMultipleChoiceItem();//選擇題
  95.     else
  96.       item = form.addListItem();//下拉式選單

  97.     var data="";
  98.     if(showNo=="是")
  99.     {
  100.         data=(i+1)+'.';

  101.     }
  102.     Logger.log(exam_no);
  103.     data+=examSheet.getRange(exam_no,2).getValue();
  104.     if(showExamNo=="是")
  105.       data+=',原題號('+examSheet.getRange(exam_no,1).getValue()+')';

  106.     Logger.log(data);

  107.     answer=parseInt(examSheet.getRange(exam_no,3).getValue(),10);
  108.     item.setTitle(data);





  109.     var answers=[];//設定答案選項

  110.       if(AnswerRand=="是")
  111.       {
  112.         //產一位移數數字1到3
  113.         OptionOffset=parseInt(3* Math.random())+1;
  114.       }

  115.     for(j=4;j<=m;j++){  //從第4欄往右讀取


  116.    
  117.       switch(QuestionType)
  118.       {
  119.       case "數字1.2.3.4.5.":
  120.         data=(j-3)+'.';
  121.         break;
  122.       case "數字(1)(2)(3)(4)(5)":
  123.         data="("+(j-3)+')';
  124.         break;
  125.       case "英文(A)(B)(C)(D)(E)":
  126.         data="("+String.fromCharCode(j-3+64)+')';
  127.         break;   
  128.       case "英文A.B.C.D.E.":   
  129.         data=String.fromCharCode(j-3+64)+'.';
  130.         break;
  131.       case "無任何提示":           
  132.         data="";
  133.         break;
  134.       }
  135.        t=(j+OptionOffset)%(m-4+1)+4;
  136.        data+=examSheet.getRange(exam_no,t).getValue(); //取得題目選項

  137.        //t1=(j+OptionOffset)%(m-4+1);
  138.        t1=(m-4+1+answer-OptionOffset)%(m-4+1);//計算位移後的答案
  139.        Logger.log(t+"-"+answer+"-"+OptionOffset+"-"+t1+"-"+data);
  140.        answers[j-4]=item.createChoice(data, t1==(j-4)); //陣列從0開始,儲存格是從1開始
  141.     }

  142.     if(isComment==true)
  143.     {
  144.        reason=examSheet.getRange(exam_no,m+2).getValue();
  145.         if(reason!='')
  146.         {
  147.           item.setFeedbackForIncorrect(
  148.           FormApp.createFeedback().setText(reason).build());
  149.           item.setFeedbackForCorrect(
  150.           FormApp.createFeedback().setText(reason).build());
  151.         }
  152.     }


  153.     item.setChoices(answers);//填入選項
  154.     if(examRequired=="是")
  155.        item.setRequired(true); //設為必填
  156.     item.setPoints(score);//設定每題分數
  157.   }
  158.   sheet.getRange("B16").setValue(form.getPublishedUrl());
  159.   sheet.getRange("B17").setValue(form.getEditUrl());
  160.   //Logger.log('公開網址: ' + form.getPublishedUrl());
  161.   //Logger.log('修改網址: ' + form.getEditUrl());  
  162.   Browser.msgBox('執行結果','公開網址: ' + form.getPublishedUrl()+'\\n修改網址: ' + form.getEditUrl(), Browser.Buttons.OK);
  163. }

  164. function add_form()
  165. {
  166.    
  167.   var sheet=SpreadsheetApp.getActiveSheet();  //取得目前工作表

  168.   var examname = sheet.getRange("B2").getValue().toString(); //題庫工作表

  169.   var field = sheet.getRange("B14").getValue().toString(); //欄位名稱

  170.   var form = FormApp.create(examname);  //建立表單

  171.   var fields=field.split(",");

  172.   for(var i=0;i<fields.length;i++)
  173.   {
  174.     var item=form.addTextItem();
  175.     item.setTitle(fields[i]);
  176.     item.setRequired(true); //設為必填
  177.   }

  178.   form.addPageBreakItem().setTitle(examname); //設定區段

  179.   sheet.getRange("B10").setValue(form.getEditUrl());
  180.   sheet.getRange("B16").setValue(form.getPublishedUrl());
  181.   sheet.getRange("B17").setValue(form.getEditUrl());
  182.   Browser.msgBox('執行結果','公開網址: ' + form.getPublishedUrl()+'\\n修改網址: ' + form.getEditUrl(), Browser.Buttons.OK);
  183. }


  184. function get_rand(min,max,n)
  185. {
  186.   var question_no=[];
  187.   var m,temp;

  188.   for(i=min;i<=max;i++)
  189.   {
  190.     question_no[i-min]=i;
  191.   }
  192.   for(i=0;i<n;i++)
  193.   {
  194.     m=parseInt((max-min+1)* Math.random());
  195.     temp=question_no[i];
  196.     question_no[i]=question_no[m];
  197.     question_no[m]=temp;
  198.   }

  199.   return question_no;
  200. }

  201. function test_rand()
  202. {
  203.   var min,max;
  204.   var question_no=[];
  205.   var n,m,temp;
  206.   min=1;
  207.   max=20;
  208.   n=10;
  209.   for(i=min;i<=max;i++)
  210.   {
  211.     question_no[i-min]=i;
  212.   }
  213.   for(i=0;i<n;i++)
  214.   {
  215.     m=parseInt((max-min+1)* Math.random());
  216.     temp=question_no[i];
  217.     question_no[i]=question_no[m];
  218.     question_no[m]=temp;
  219.   }

  220.   Logger.log(question_no);
  221. }
  222. function test1()
  223. {
  224.    var sheet=SpreadsheetApp.getActiveSheet();  //取得目前工作表

  225.   var examSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("題庫");
  226.   
  227.   var examname = examSheet.getRange("A2").getValue().toString(); //考卷名稱
  228.   


  229.   var m=examSheet.getLastColumn();//取得欄數
  230.   var n=sheet.getRange("B5").getValue();//取得筆數
  231.   var i,j;//迴圈變數   

  232.   var min,max;
  233.   var min=sheet.getRange("B3").getValue();
  234.   var max=sheet.getRange("B4").getValue();
  235.   
  236.   var score=100/(n-1);  //計算每題分數

  237. }
  238. function GetSheetNames() {
  239.   //取得所有工作表到陣列
  240.   var out = new Array()
  241.   var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  242.   for (var i=0 ; i<sheets.length ; i++)
  243.   {
  244.     if(sheets[i].getName()!="參數設定")
  245.       out.push( [ sheets[i].getName() ] )
  246.   }
  247.   
  248.   return out
  249. }
  250. function GetExamSheet()
  251. {
  252.   //設定下拉選項
  253.    var data;
  254.    data=GetSheetNames();


  255.   var spreadsheet = SpreadsheetApp.getActive();
  256.   spreadsheet.getRange('B1').activate();
  257.   spreadsheet.getRange('B1').setDataValidation(SpreadsheetApp.newDataValidation()
  258.   .setAllowInvalid(true)
  259.   .requireValueInList(data, true)
  260.   .build());
  261. }

複製代碼
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-6-11 10:29:48 | 顯示全部樓層
vollkommen 發表於 2021-6-10 22:14
我使用原程式執行時,發現五個選項加上空格跟詳解,全部都會變成選項共7個
抱歉下面是我修改的程式碼全部
...

我已在原檔案加上5個選項的範例,您執行看看。若不行請將您的試算表分享給我,試算表的資料是跟程式有相閞的。
回復 支持 反對

使用道具 舉報

發表於 2021-6-11 12:19:13 | 顯示全部樓層
老師您好,我直接建立您的副本無修改,跑一次五個選項的試算表,還是出現選項跑掉的情況。
還是我的google試算表有問題?
試算表副本

截圖

截圖
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-6-11 12:36:25 | 顯示全部樓層
vollkommen 發表於 2021-6-11 12:19
老師您好,我直接建立您的副本無修改,跑一次五個選項的試算表,還是出現選項跑掉的情況。
還是我的google ...

form_20210611.jpg
您權限沒開.
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-6-11 15:05:30 | 顯示全部樓層
vollkommen 發表於 2021-6-11 12:19
老師您好,我直接建立您的副本無修改,跑一次五個選項的試算表,還是出現選項跑掉的情況。
還是我的google ...

我程式已修正錯誤,再麻煩您重新下載或是只要修改底下這行.
  1. t=(j-4+OptionOffset)%(m-4+1)+4;
複製代碼
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)

GMT+8, 2021-9-21 15:53 , Processed in 0.116806 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表