6

tôi đã chiết xuất các thông số yêu cầu Google Calendar in để họ có thể được sử dụng để xuất khẩu hoặc UrlFetchApp họ sử dụng Apps ScriptXuất google lịch dưới dạng PDF với các sự kiện sử dụng GAS

Các thông số được liệt kê dưới đây, Khi tôi truy cập URL này thông qua trình duyệt đã đăng nhập, nó hiển thị các sự kiện

Nhưng khi tôi chạy giống nhau thông qua tập lệnh ứng dụng, tôi nhận được tệp PDF lịch không có sự kiện.

Ủy quyền được chuyển hoàn toàn hoặc rõ ràng như thế nào? Tôi vừa qua Bearer

https://calendar.google.com/calendar/printable?psd=false 
&ctz=Asia%2FCalcutta 
&dates=20170507%2F20170520 
&mode=month 
&pbw=false 
&pfs=NORMAL 
&pft=pdf 
&pgsz=a4 
&pli=1 
&po=PORTRAIT 
&pred=20170520 
&prsd=20170507 
&psa=false 
&psdec=false 
&pset=false 
&psr=false 
&rand=-6094307348214370018# 
&src=Y29mbS5lZHUuaW5fdWxoOHIza2Fyc2QyYnVzaDAzNG10OTIzbjRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ 

Trong kịch bản Apps của tôi,

//url specified as above 

    var response = UrlFetchApp.fetch(url, { 
    headers: { 
     'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() 
    }, 
    'followRedirects': true 

}); 
+2

Hãy thử sử dụng [Tạm ứng Google Dịch vụ] (https://developers.google.com/apps-script/guides/services/advanced) thay vì sử dụng phương thức 'UrlFetchApp'. Các dịch vụ nâng cao trong Apps Script cho phép các nhà phát triển có kinh nghiệm kết nối với một số API Google công khai nhất định với ít thiết lập hơn so với sử dụng giao diện HTTP của họ. Có [Google Apps Script Quickstart] (https://developers.google.com/google-apps/calendar/quickstart/apps-script) có thể giúp bạn bắt đầu triển khai danh sách sự kiện vào Apps Script của bạn rồi tải xuống dưới dạng một tệp PDF. Hi vọng điêu nay co ich. –

+0

Câu hỏi không phải là về việc sử dụng Dịch vụ nâng cao của Google. Xin vui lòng –

Trả lời

1

tôi luôn luôn thấy rằng quan điểm có thể in được cắt đứt các tên sự kiện, không có vấn đề gì tôi đã làm để điều chỉnh quan điểm và đưa ra hộp lớn nhất có thể. Tôi đã kết thúc bằng cách viết một tập lệnh tạo lịch in thân thiện bằng dịch vụ HTML. Tôi đã xuất bản dưới dạng ứng dụng web và khách truy cập vào trang web có thể sử dụng công cụ in của trình duyệt của họ để in, nhưng tôi cũng gọi nó bằng một tập lệnh khác gửi email pdf đến danh sách gửi thư hàng tháng. Google Apps Script:

var hasFourthRow=false; 
var hasFifthRow=false; 
var hasPreviousMonth=false; 

function doGet(e) { 
    var calendarID = "your_cal_id"; 
    var calName = "My Calendar"; 
    var future; 
    if(!e.parameter.future){ 
    future = 0 
    } else { 
    future = +e.parameter.future; 
    hasPreviousMonth = true; 
    } 
    if(!d){ 
    var d = new Date(); 
    } 
    var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; 
    var monthNumber = future + d.getMonth() 
    var yearNumber = d.getFullYear(); 

    if(monthNumber > 12){ 
    monthNumber = monthNumber - 12; 
    yearNumber = yearNumber + 1; 
    } 



    var monthBegin = new Date(yearNumber, monthNumber, 1); 
    var firstSundayInGrid = new Date(monthBegin); 



    monthNumber = monthNumber + 1; 
    if(monthNumber > 12){ 
    monthNumber = monthNumber - 12; 
    yearNumber = yearNumber + 1; 
    } 

    var prevMonthNumber = monthNumber - 1; 
    var prevYearNumber = yearNumber; 
    if(prevMonthNumber < 1){ 
    prevMonthNumber = prevMonthNumber + 12; 
    prevYearNumber = prevYearNumber - 1; 
    } 
    var nextMonthNumber = monthNumber + 1; 
    var nextYearNumber = yearNumber; 
    if(nextMonthNumber > 12){ 
    nextMonthNumber = nextMonthNumber - 12; 
    nextYearNumber = nextYearNumber + 1; 
    } 

    var calDate = months[monthNumber-1].concat(" ", yearNumber); 
    firstSundayInGrid.setDate(monthBegin.getDate() - monthBegin.getDay()); 
    var monthEnd = new Date(yearNumber, monthNumber,0); 
    var lastSaturdayInGrid = new Date(monthEnd); 
    lastSaturdayInGrid.setDate(monthEnd.getDate() + (6 - monthEnd.getDay())); 

    var cal = CalendarApp.getCalendarById(calendarID); 

    var gridStrings = []; 
    var i=0; 
    for(var indexDate = new Date(firstSundayInGrid);indexDate <= lastSaturdayInGrid;indexDate.setDate(indexDate.getDate()+1)){ 
    if(indexDate.getDate() == 1){ 
     gridStrings[i] = "<strong>" + months[indexDate.getMonth()].concat(" ", indexDate.getDate().toString()) + "</strong><br/>"; 
    } else { 
     gridStrings[i] = indexDate.getDate().toString() + "<br/>"; 
    } 
    var calEvents = cal.getEventsForDay(indexDate); 
    for(e in calEvents){ 
     if(calEvents[e].isAllDayEvent()){ 
     gridStrings[i] = gridStrings[i].concat(calEvents[e].getTitle(), '<br/>'); 
     } else if(calEvents[e].getStartTime() < indexDate){ 
     gridStrings[i] = gridStrings[i].concat(calEvents[e].getTitle(), '<br/>'); 
     } else { 
     gridStrings[i] = gridStrings[i].concat(friendlyTimeString(calEvents[e].getStartTime()), ' - ', calEvents[e].getTitle(), '<br/>'); 
     } 
    } 
    i++; 
    } 

    var calGrid = HtmlService.createTemplateFromFile("CalendarTemplate"); 
    calGrid.CalName = calName; 
    calGrid.CalDate = calDate; 
    var newFuture; 
    if(future>1){ 
    newFuture = future - 1; 
    calGrid.PrevMonthURL = "?future=" + newFuture; 
    calGrid.PrevMonth = months[prevMonthNumber-1].concat(" ", prevYearNumber); 
    } 
    if(future==1){ 
    calGrid.PrevMonthURL = ""; 
    calGrid.PrevMonth = months[prevMonthNumber-1].concat(" ", prevYearNumber); 
    } 
    newFuture = future + 1; 
    calGrid.NextMonthURL = "?future=" + newFuture; 
    calGrid.NextMonth = months[nextMonthNumber-1].concat(" ", nextYearNumber); 

    calGrid.Sun0 = gridStrings[0]; 
    calGrid.Mon0 = gridStrings[1]; 
    calGrid.Tue0 = gridStrings[2]; 
    calGrid.Wed0 = gridStrings[3]; 
    calGrid.Thu0 = gridStrings[4]; 
    calGrid.Fri0 = gridStrings[5]; 
    calGrid.Sat0 = gridStrings[6]; 

    calGrid.Sun1 = gridStrings[7]; 
    calGrid.Mon1 = gridStrings[8]; 
    calGrid.Tue1 = gridStrings[9]; 
    calGrid.Wed1 = gridStrings[10]; 
    calGrid.Thu1 = gridStrings[11]; 
    calGrid.Fri1 = gridStrings[12]; 
    calGrid.Sat1 = gridStrings[13]; 

    calGrid.Sun2 = gridStrings[14]; 
    calGrid.Mon2 = gridStrings[15]; 
    calGrid.Tue2 = gridStrings[16]; 
    calGrid.Wed2 = gridStrings[17]; 
    calGrid.Thu2 = gridStrings[18]; 
    calGrid.Fri2 = gridStrings[19]; 
    calGrid.Sat2 = gridStrings[20]; 

    calGrid.Sun3 = gridStrings[21]; 
    calGrid.Mon3 = gridStrings[22]; 
    calGrid.Tue3 = gridStrings[23]; 
    calGrid.Wed3 = gridStrings[24]; 
    calGrid.Thu3 = gridStrings[25]; 
    calGrid.Fri3 = gridStrings[26]; 
    calGrid.Sat3 = gridStrings[27]; 

    if(gridStrings[28]){ 
     hasFourthRow=true; 
     calGrid.Sun4 = gridStrings[28]; 
     calGrid.Mon4 = gridStrings[29]; 
     calGrid.Tue4 = gridStrings[30]; 
     calGrid.Wed4 = gridStrings[31]; 
     calGrid.Thu4 = gridStrings[32]; 
     calGrid.Fri4 = gridStrings[33]; 
     calGrid.Sat4 = gridStrings[34]; 
    } 

    if(gridStrings[35]){ 
     hasFifthRow=true; 
     calGrid.Sun5 = gridStrings[35]; 
     calGrid.Mon5 = gridStrings[36]; 
     calGrid.Tue5 = gridStrings[37]; 
     calGrid.Wed5 = gridStrings[38]; 
     calGrid.Thu5 = gridStrings[39]; 
     calGrid.Fri5 = gridStrings[40]; 
     calGrid.Sat5 = gridStrings[41]; 
    } 

    calGrid.datePrinted = d.toDateString(); 

    return calGrid.evaluate(); 
    } 

    function fourthRow() { 
    return hasFourthRow; 
    } 

    function fifthRow() { 
    return hasFifthRow; 
    } 

    function showPreviousMonth(){ 
    return hasPreviousMonth; 
    } 


    function friendlyTimeString(time){ 
    var hours = time.getHours(); 
    var minutes = time.getMinutes(); 
    var minutesString = ""; 
    if(minutes < 10){ 
     minutesString = "0" + minutes.toString(); 
    } else { 
     minutesString = minutes.toString(); 
    } 
    var dayPart = "AM"; 
    if(hours>=12){ 
     dayPart = "PM"; 
     hours -= 12; 
    } 
    if(hours == 0){ 
     hours = 12; 
    } 
    return hours.toString() + ":" + minutesString + " " + dayPart; 

Và HTML cho mẫu:

<!DOCTYPE html> 
 
<style> 
 
table, th, td { 
 
    border: 1px solid black; 
 
    border-collapse: collapse; 
 
} 
 

 
@media print { .noprint { display: none; } } 
 

 
tfoot { 
 
    font-size: small; 
 
} 
 

 
table { 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 
    
 
th, td { 
 
    padding: 5px; 
 
    vertical-align: top; 
 
    width: 14%; 
 
} 
 

 
h2 { 
 
    text-align: center; 
 
} 
 

 
body { 
 
    margin: 1; 
 
    padding: 1; 
 
} 
 

 
.cal{ 
 
    min-height: 90px; 
 
} 
 

 
.container { 
 
    position: relative; 
 
    width: 100%; 
 
} 
 

 
.right { 
 
    position: absolute; 
 
    right: 0px; 
 
    width: 50px; 
 
} 
 

 
.left { 
 
    position: absolute; 
 
    left: 0px; 
 
    width: 50px; 
 
} 
 
</style> 
 
<div> 
 
<div class="container"> 
 
    <img class="left" src=""> 
 

 
<img class="right" src=""> 
 
<h2><?=CalName?><br/> 
 
     <?=CalDate?> 
 
    </h2> 
 
</div> 
 
<table> 
 
<tr> 
 
    <th>Sun</th> 
 
    <th>Mon</th> 
 
    <th>Tue</th> 
 
    <th>Wed</th> 
 
    <th>Thu</th> 
 
    <th>Fri</th> 
 
    <th>Sat</th> 
 
</tr> 
 
<tr> 
 
    <td><div class="cal"><?!=Sun0?></div></td> 
 
    <td><?!=Mon0?></td> 
 
    <td><?!=Tue0?></td> 
 
    <td><?!=Wed0?></td> 
 
    <td><?!=Thu0?></td> 
 
    <td><?!=Fri0?></td> 
 
    <td><?!=Sat0?></td> 
 
</tr> 
 
<tr> 
 
    <td><div class="cal"><?!=Sun1?></div></td> 
 
    <td><?!=Mon1?></td> 
 
    <td><?!=Tue1?></td> 
 
    <td><?!=Wed1?></td> 
 
    <td><?!=Thu1?></td> 
 
    <td><?!=Fri1?></td> 
 
    <td><?!=Sat1?></td> 
 
</tr> 
 
<tr> 
 
    <td><div class="cal"><?!=Sun2?></div></td> 
 
    <td><?!=Mon2?></td> 
 
    <td><?!=Tue2?></td> 
 
    <td><?!=Wed2?></td> 
 
    <td><?!=Thu2?></td> 
 
    <td><?!=Fri2?></td> 
 
    <td><?!=Sat2?></td> 
 
</tr> 
 
<tr> 
 
    <td><div class="cal"><?!=Sun3?></div></td> 
 
    <td><?!=Mon3?></td> 
 
    <td><?!=Tue3?></td> 
 
    <td><?!=Wed3?></td> 
 
    <td><?!=Thu3?></td> 
 
    <td><?!=Fri3?></td> 
 
    <td><?!=Sat3?></td> 
 
</tr> 
 
<? if(fourthRow()){?> 
 
    <tr> 
 
     <td><div class="cal"><?!=Sun4?></div></td> 
 
     <td><?!=Mon4?></td> 
 
     <td><?!=Tue4?></td> 
 
     <td><?!=Wed4?></td> 
 
     <td><?!=Thu4?></td> 
 
     <td><?!=Fri4?></td> 
 
     <td><?!=Sat4?></td> 
 
    </tr> 
 
<? } ?> 
 
<? if(fifthRow()){?> 
 
    <tr> 
 
     <td><div class="cal"><?!=Sun5?></div></td> 
 
     <td><?!=Mon5?></td> 
 
     <td><?!=Tue5?></td> 
 
     <td><?!=Wed5?></td> 
 
     <td><?!=Thu5?></td> 
 
     <td><?!=Fri5?></td> 
 
     <td><?!=Sat5?></td> 
 
    </tr> 
 
<? } ?> 
 
<tfoot> 
 
    <tr><td colspan="7">This calendar is accurate as of <?= datePrinted ?>.</td></tr> 
 
</tfoot> 
 
</table> 
 
</div> 
 
<div class="noprint"> 
 
    <table> 
 
     <tr> 
 
     <td> 
 
      <? if(showPreviousMonth()){?> 
 
       <a href="url to your script when you publish it<?!=PrevMonthURL?>" target="_new"><?!=PrevMonth?></a> 
 
      <? } ?> 
 
     </td> 
 
     <td style="text-align: right"> 
 
      <a href="url to your script when you publish it<?!=NextMonthURL?>" target="_new"><?!=NextMonth?></a> 
 
     </td> 
 
     </tr> 
 
    </table> 
 
</div>

Các vấn đề liên quan