Google 앱 스크립트가 때때로 스프레드 시트에 이미지를 삽입 할 수 없음

Tiktac

내 프로젝트는 Ruby on Rails에 의해 작성되었습니다. google-api-client gem은 시트 API를 통해 스프레드 시트에 이미지를 삽입하는 것을 지원하지 않기 때문에 Google 앱 스크립트를 사용하여이 작업을 처리하고 있습니다. 대부분의 경우 삽입은 다음 호출로 성공했습니다.

@app_script.run_script(script_id, request) 

호기심이 많은 사람에게 스크립트를 제공합니다. https://script.google.com/a/vectorgroup.vn/d/1ndcgpfJMj3YdKj0pEvHWz0pF4NtcQyR1Qg8wj7ZnpKfIwP2UsH0xaYq4/edit?splash=yes

문제는 때때로 아래 오류로 인해 호출이 실패하는 것입니다.

오류 세부 정보 : [{\ "@ type \"=> \ "type.googleapis.com/google.apps.script.v1.ExecutionError \", \ "scriptStackTraceElements \"=> [{\ "function \"=> \ "addImageOnSpreadsheet \"}], \ "errorMessage \"=> \ "예외 : URL 또는 잘못된 URL에서 이미지 검색 오류 : https://drive.google.com/uc?id=1MS6KMfua7kZCSGMUhny4kDUvalxTkoKJ&export=download \", \ "errorType \ "=> \"ScriptError \ "}]"2020-04-06T06 : 03 : 33.821Z pid = 26645 tid = tz8bh class = ImageTakerWorker jid = d847bf91beea8aeb4a30b042 elapsed = 11.689 정보 : 완료 오류 : 3 ""오류 세부 정보 : [{ \ "@ type \"=> \ "type.googleapis.com/google.apps.script.v1.ExecutionError \", \ "scriptStackTraceElements \"=> [{\ "function \"=> \ "addImageOnSpreadsheet \ "}], \"errorMessage \ "=> \"예외 : URL 또는 잘못된 URL에서 이미지 검색 오류 :https://drive.google.com/uc?id=1G9EDgvygwVztMG66FArZ6BEFpzW71izA&export=download \ ", \"errorType \ "=> \"ScriptError \ "}]"2020-04-06T08 : 00 : 28.330Z pid = 26645 tid = tz7zl class = ImageTakerWorker jid = a6b4fcb47db15f71dbf1d3f5 elapsed = 6.514 정보 : 완료 "이미지 삽입 오류 : #, #" "오류 : 3" "오류 세부 정보 : [{\"@ type \ "=> \"type.googleapis.com/google .apps.script.v1.ExecutionError \ ", \"scriptStackTraceElements \ "=> [{\"function \ "=> \"addImageOnSpreadsheet \ "}], \"errorMessage \ "=> \"예외 : 다음에서 이미지를 검색하는 중 오류가 발생했습니다. URL 또는 잘못된 URL : https://drive.google.com/uc?id=1_3KzBDDgpINMCNkEZj2LivqdUaxFKZNT&export=download \ ", \"errorType \ "=> \"ScriptError \ "}]"2020-04-06T08 : 00 : 28.941Z pid = 26645 tid = tzahx class = ImageTakerWorker jid = 8010f8c64cb9a0efa672b713 elapsed = 7.121 정보 : 완료

URL 이미지에서 문제가 발생하는 것 같습니다. 어떻게 든 Google 앱 스크립트가 이미지 데이터를 추출 할 수 없습니다. 그러나 문제가 발생하면 오류 로그의 이미지 URL 위를 브라우저에 수동으로 복사하여 붙여 넣으면 이미지를 성공적으로 다운로드 할 수 있습니다. 이미 이미지 URL에 대해 공개를 설정했습니다.

아래는 내 Google 앱 스크립트 부분입니다.

class GoogleAppScript
  APPLICATION_NAME = "Insert image to spreadsheet".freeze

  def initialize(user_id, sheet_id, options = {})
    @user = User.find(user_id)
    @sheet_id = sheet_id
    @from_class = options[:from_class]
    @service = options[:service]
    @keyword = options[:keyword]
    @sheet_name = options[:service] == "google" ? "G" + options[:keyword].strip : "Y" + options[:keyword].strip
    @image_file_id = options[:image_file_id]
    @google_authorization = GoogleAuthorization.new(@user).authorize
    @app_script = Google::Apis::ScriptV1::ScriptService.new
    @app_script.client_options.application_name = APPLICATION_NAME
    @app_script.authorization = @google_authorization
  end

  def execute
    script_id = "1ndcgpfJMj3YdKj0pEvHWz0pF4NtcQyR1Qg8wj7ZnpKfIwP2UsH0xaYq4"
    url_image = "https://drive.google.com/uc?id=#{@image_file_id}&export=download"

    start_col = 1
    if @from_class == "ImageX"
      start_row = 51
      width = 692
      height = 1500
    else # "ImageY"
      start_row = @keyword.last == " " ? 30 : 9
      width = 694
      height = 418
    end
    request = Google::Apis::ScriptV1::ExecutionRequest.new(
      function: "addImageOnSpreadsheet",
      parameters: [@sheet_id, @sheet_name, url_image, start_col, start_row, width, height],
    )

    begin
      response = @app_script.run_script(script_id, request)
      if response.error
        # Retry until success
        # ImageTakerWorker.perform_async(@user.id, @sheet_id, @sheet_name, @image_file_id)
        p "Insert image ERROR: #{response}, #{response.error}"
        p "Error: #{response.error.code}"
        p "Error detail: #{response.error.details}"
      else
        p "Insert image successfully"
      end
    rescue Google::Apis::ClientError
      # Handle the error...
    end
  end
end

누구든지 이것에 대한 경험이 있습니까?

Tanaike

이것은 내 이해입니다.

  • 귀하의 상황에서 Google 스프레드 시트에 이미지를 삽입하면 오류가 Server error발생합니다.
  • 이 경우 이미지의 크기는 한계 이상으로 간주됩니다. 참고
  • Google 스프레드 시트에 삽입하기위한 제한 크기가 끝났을 때 이미지 크기를 조정하려고합니다.

문제 및 해결 방법 :

이 경우에도 때 setWidthsetHeight사용되는 오류를 제거 할 수 없다. 이미지를 삽입 할 때 오류가 발생하기 때문입니다. 그래서이 답변에서는 Google Apps Script 라이브러리에서 크기를 조정하여 이미지를 삽입하는 것을 제안하고 싶습니다.

수정 된 스크립트 :

스크립트를 수정하면 다음과 같이됩니다. 이 스크립트를 사용하기 전에 ImgApp의 GAS 라이브러리 를 설치하십시오 .

function addImageOnSpreadsheet(spreadsheet_id, sheet_name, image_file_id, column, row, width, height) {
  let blobSource = DriveApp.getFileById(image_file_id).getBlob();
  const obj = ImgApp.getSize(blobSource);
  if (obj.height * obj.width > 1048576) {
    blobSource = ImgApp.doResize(image_file_id, width).blob;
  }
  let image = SpreadsheetApp.openById(spreadsheet_id).insertImage(blobSource, column, row);
  image.setWidth(width).setHeight(height);
}
  • 테스트로 스크립트 편집기에서 스크립트를 직접 실행하는 것이 좋습니다.

노트 :

  • 이 경우 다음 세 가지 범위가 사용됩니다. 전체 스크립트에 대해 잘 모르겠지만 해당 범위를 추가하십시오. 조심하세요. 귀하의 경우 범위를 추가하고 다시 승인하십시오. 이를 통해 유효한 액세스 토큰을 사용할 수 있습니다.
    • https://www.googleapis.com/auth/drive
    • https://www.googleapis.com/auth/script.external_request
    • https://www.googleapis.com/auth/spreadsheets

참조 :

추가 :

샘플 스크립트 :

이 샘플 스크립트는 여러 파일 ID를 받기위한 것입니다.

function addImageOnSpreadsheet(ar) {
  ar.forEach(o => {
    let blobSource = DriveApp.getFileById(o.image_file_id).getBlob();
    const obj = ImgApp.getSize(blobSource);
    if (obj.height * obj.width > 1048576) {
      blobSource = ImgApp.doResize(o.image_file_id, o.width).blob;
    }
    var image = SpreadsheetApp.openById(o.spreadsheet_id).insertImage(blobSource, o.column, o.row);
    image.setWidth(o.width).setHeight(o.height);
  });
}
  • 예를 들어 ar다음과 같습니다.

      ar = [
        {spreadsheet_id: "###", image_file_id: "###", column: ##, row: ##, width: ###, height: ###},
        {spreadsheet_id: "###", image_file_id: "###", column: ##, row: ##, width: ###, height: ###},
        ,
        ,
      ];
    

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

앱 스크립트를 사용하여 Google 프레젠테이션에 이미지를 삽입 할 수 없습니다.

분류에서Dev

Google 앱 스크립트-UrlFetchApp.Fetch를 게시 할 수 없음

분류에서Dev

Google지도-infoWindow에 텍스트와 이미지를 삽입 할 수 없음

분류에서Dev

Google 앱 스크립트가 알 수없는 차원 배열을 스프레드 시트에로드하면 모순되는 메시지가 표시됨

분류에서Dev

스크립트를 사용하여 Google 시트에 수식을 추가 할 때 인식 할 수없는 기능

분류에서Dev

입력 된 데이터를 복사하여 스프레드 시트에 붙여 넣을 때 셀을 업데이트하는 데 사용할 트리거는 무엇입니까? (Google 스프레드 시트 / 앱 스크립트)

분류에서Dev

값을 가져올 때 시트에 날짜 스탬프를 자동으로 추가하는 Google 스프레드 시트 / 앱 스크립트

분류에서Dev

watchOS 용으로 빌드 할 때 CoreTelephony를 사용할 수 없음-iOS 앱 프로젝트에 시계 앱 대상을 추가 할 때

분류에서Dev

때때로 Google 스프레드 시트 공식 줄 간격을 편집 할 수없는 이유는 무엇입니까?

분류에서Dev

스프레드 시트에 값을 삽입 할 때 VBA가 "잘못된"문자를 처리하지 않음

분류에서Dev

반응 타입 스크립트를로드 할 수없는 이미지

분류에서Dev

수정할 때마다 Google 스프레드 시트를 .XLSX로 내보내기

분류에서Dev

이미지 위로 마우스를 가져갈 때 텍스트를 표시 할 수 없음

분류에서Dev

Google 스프레드 시트에서 스크립트를 실행할 때 "스크립트가 초당 너무 많이 호출 됨"발생

분류에서Dev

여러 Docker 호스트를 사용할 때 이미지를 가져올 수 없음 이미지를 가져올 수 없음 오류로 컨테이너를 만들 수 없음이 표시되는 이유는 무엇입니까?

분류에서Dev

Google 스프레드 시트에 열을 삽입 할 때 일괄 요청 사용

분류에서Dev

Google 시트에서 시트 이름을 검색 할 때 와일드 카드 표현식입니다. Google 앱 스크립트

분류에서Dev

앱 스크립트를 통해 bigquery에서 Google 시트 연결 테이블을 참조 할 수 없습니다.

분류에서Dev

스프레드 시트 용 Google 앱 스크립트에서 "수식 표시"함수를 호출 할 수 있습니까?

분류에서Dev

웹 앱 매크로 링크에 액세스하는 사람이 내 스크립트 또는 스프레드 시트에 액세스 할 수 있습니까?

분류에서Dev

Google 스프레드 시트 이메일 앱 스크립트에 하이퍼 링크 이미지 추가

분류에서Dev

Google 스크립트로 Gmail에서 Google 스프레드 시트로 표 삽입

분류에서Dev

Google 스프레드 시트에서 데이터를 비공개로 유지하면서 앱 스크립트로 수정 대화 상자를 제공합니다.

분류에서Dev

앱 스크립트를 통해 Google 스프레드 시트로 Google 인증

분류에서Dev

`sh`로 스크립트를 실행할 때 찾을 수 없음 오류

분류에서Dev

`sh`로 스크립트를 실행할 때 찾을 수 없음 오류

분류에서Dev

pyinstaller를 사용할 때 스크립트를 찾을 수 없음

분류에서Dev

Google 시트 스크립트를 사용할 때 새 시트 사본을 만들지 않고 스프레드 시트의 시트를 다른 스프레드 시트로 복사하는 방법은 무엇입니까?

분류에서Dev

앱 스크립트를 사용하여 Google 문서에 이미지를 삽입하면 잘못된 이미지 데이터가 표시됩니다.

Related 관련 기사

  1. 1

    앱 스크립트를 사용하여 Google 프레젠테이션에 이미지를 삽입 할 수 없습니다.

  2. 2

    Google 앱 스크립트-UrlFetchApp.Fetch를 게시 할 수 없음

  3. 3

    Google지도-infoWindow에 텍스트와 이미지를 삽입 할 수 없음

  4. 4

    Google 앱 스크립트가 알 수없는 차원 배열을 스프레드 시트에로드하면 모순되는 메시지가 표시됨

  5. 5

    스크립트를 사용하여 Google 시트에 수식을 추가 할 때 인식 할 수없는 기능

  6. 6

    입력 된 데이터를 복사하여 스프레드 시트에 붙여 넣을 때 셀을 업데이트하는 데 사용할 트리거는 무엇입니까? (Google 스프레드 시트 / 앱 스크립트)

  7. 7

    값을 가져올 때 시트에 날짜 스탬프를 자동으로 추가하는 Google 스프레드 시트 / 앱 스크립트

  8. 8

    watchOS 용으로 빌드 할 때 CoreTelephony를 사용할 수 없음-iOS 앱 프로젝트에 시계 앱 대상을 추가 할 때

  9. 9

    때때로 Google 스프레드 시트 공식 줄 간격을 편집 할 수없는 이유는 무엇입니까?

  10. 10

    스프레드 시트에 값을 삽입 할 때 VBA가 "잘못된"문자를 처리하지 않음

  11. 11

    반응 타입 스크립트를로드 할 수없는 이미지

  12. 12

    수정할 때마다 Google 스프레드 시트를 .XLSX로 내보내기

  13. 13

    이미지 위로 마우스를 가져갈 때 텍스트를 표시 할 수 없음

  14. 14

    Google 스프레드 시트에서 스크립트를 실행할 때 "스크립트가 초당 너무 많이 호출 됨"발생

  15. 15

    여러 Docker 호스트를 사용할 때 이미지를 가져올 수 없음 이미지를 가져올 수 없음 오류로 컨테이너를 만들 수 없음이 표시되는 이유는 무엇입니까?

  16. 16

    Google 스프레드 시트에 열을 삽입 할 때 일괄 요청 사용

  17. 17

    Google 시트에서 시트 이름을 검색 할 때 와일드 카드 표현식입니다. Google 앱 스크립트

  18. 18

    앱 스크립트를 통해 bigquery에서 Google 시트 연결 테이블을 참조 할 수 없습니다.

  19. 19

    스프레드 시트 용 Google 앱 스크립트에서 "수식 표시"함수를 호출 할 수 있습니까?

  20. 20

    웹 앱 매크로 링크에 액세스하는 사람이 내 스크립트 또는 스프레드 시트에 액세스 할 수 있습니까?

  21. 21

    Google 스프레드 시트 이메일 앱 스크립트에 하이퍼 링크 이미지 추가

  22. 22

    Google 스크립트로 Gmail에서 Google 스프레드 시트로 표 삽입

  23. 23

    Google 스프레드 시트에서 데이터를 비공개로 유지하면서 앱 스크립트로 수정 대화 상자를 제공합니다.

  24. 24

    앱 스크립트를 통해 Google 스프레드 시트로 Google 인증

  25. 25

    `sh`로 스크립트를 실행할 때 찾을 수 없음 오류

  26. 26

    `sh`로 스크립트를 실행할 때 찾을 수 없음 오류

  27. 27

    pyinstaller를 사용할 때 스크립트를 찾을 수 없음

  28. 28

    Google 시트 스크립트를 사용할 때 새 시트 사본을 만들지 않고 스프레드 시트의 시트를 다른 스프레드 시트로 복사하는 방법은 무엇입니까?

  29. 29

    앱 스크립트를 사용하여 Google 문서에 이미지를 삽입하면 잘못된 이미지 데이터가 표시됩니다.

뜨겁다태그

보관