<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>tanaike - Google Apps Script, Gemini API, and Developer Tips</title>
    <link>https://tanaikech.github.io/</link>
    <description>Recent content on tanaike - Google Apps Script, Gemini API, and Developer Tips</description>
    <generator>Hugo</generator>
    <language>ja</language>
    <copyright>&amp;copy; 2026. All rights reserved.</copyright>
    <lastBuildDate>Thu, 02 Apr 2026 15:08:14 +0900</lastBuildDate>
    <atom:link href="https://tanaikech.github.io/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Recursive Knowledge Crystallization: Enabling Persistent Evolution and Zero-Shot Transfer in AI Agents</title>
      <link>https://tanaikech.github.io/2026/04/02/recursive-knowledge-crystallization-enabling-persistent-evolution-and-zero-shot-transfer-in-ai-agents/</link>
      <pubDate>Thu, 02 Apr 2026 15:08:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/04/02/recursive-knowledge-crystallization-enabling-persistent-evolution-and-zero-shot-transfer-in-ai-agents/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b1f29036cf09a4246d29e72fd9f06296&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260402a/fig1a.jpg&#34;&#xA;     alt=&#34;fig1a&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This paper presents a self-evolving framework, &lt;strong&gt;Recursive Knowledge Crystallization (RKC)&lt;/strong&gt;, designed to overcome the &amp;ldquo;Catastrophic Forgetting&amp;rdquo; inherent in autonomous AI agents. By persisting evolved technical insights into a universally readable &lt;code&gt;SKILL.md&lt;/code&gt; file based on the &lt;a href=&#34;https://agentskills.io/home&#34;&gt;Agent skills&lt;/a&gt; specification, this approach establishes long-term memory and cross-platform portability. The framework was empirically validated through the development of &lt;a href=&#34;https://github.com/brucemcpherson/gas-fakes&#34;&gt;gas-fakes&lt;/a&gt;, a highly complex Node.js-to-Google Apps Script (GAS) emulation library. The results demonstrate that agents can autonomously internalize project-specific architectural patterns and environmental nuances. Consequently, the framework achieves &lt;strong&gt;Zero-Shot Knowledge Transfer&lt;/strong&gt; across distinct toolchains (Google Antigravity and the Gemini CLI) while maintaining absolute 1:1 behavioral parity with the live GAS environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mastering Google Apps Script CI/CD: Seamless GitHub Actions Integration with gas-fakes</title>
      <link>https://tanaikech.github.io/2026/03/25/mastering-google-apps-script-ci/cd-seamless-github-actions-integration-with-gas-fakes/</link>
      <pubDate>Wed, 25 Mar 2026 16:05:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/03/25/mastering-google-apps-script-ci/cd-seamless-github-actions-integration-with-gas-fakes/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/59fd160e6389931075339a74ee143b08&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260325a/fig1a.jpg&#34;&#xA;     alt=&#34;fig1a&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Discover how to seamlessly integrate Google Workspace with GitHub Actions using the gas-fakes library. This guide demonstrates running Google Apps Script locally and within CI/CD pipelines without deploying Web Apps. Automate workflows, secure credentials, and effortlessly interact with Google Drive and Sheets directly from your repository.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Google Apps Script (GAS) is a powerful low-code platform that enables developers to integrate, automate, and extend Google Workspace with ease. &lt;a href=&#34;https://workspace.google.com/products/apps-script/&#34;&gt;Ref&lt;/a&gt; Typically, executing GAS requires the script to be hosted on Google&amp;rsquo;s servers via the Script Editor. While tools like &lt;code&gt;clasp&lt;/code&gt; allow for local development and synchronization, running scripts from outside the Google ecosystem—such as from a local environment or a different cloud provider—often involves complex setups relying heavily on the Apps Script API or Web Apps. &lt;a href=&#34;https://github.com/google/clasp&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google AI badge</title>
      <link>https://tanaikech.github.io/2026/02/26/google-ai-badge/</link>
      <pubDate>Thu, 26 Feb 2026 15:23:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/02/26/google-ai-badge/</guid>
      <description>&lt;p&gt;I got an awarded for publishing a top Google AI post for this article.&#xA;&lt;a href=&#34;https://dev.to/gde/recursive-knowledge-crystallization-a-framework-for-persistent-autonomous-agent-self-evolution-4mk4&#34;&gt;Recursive Knowledge Crystallization: A Framework for Persistent Autonomous Agent Self-Evolution&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260226a/20260226a.jpg&#34;&#xA;     alt=&#34;fig&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recursive Knowledge Crystallization: A Framework for Persistent Autonomous Agent Self-Evolution</title>
      <link>https://tanaikech.github.io/2026/02/21/recursive-knowledge-crystallization-a-framework-for-persistent-autonomous-agent-self-evolution/</link>
      <pubDate>Sat, 21 Feb 2026 16:13:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/02/21/recursive-knowledge-crystallization-a-framework-for-persistent-autonomous-agent-self-evolution/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/da47643a4b59578092f0129a9eb0c9c5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260221a/fig1a.jpg&#34;&#xA;     alt=&#34;fig1a&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;In the development of autonomous agents using Large Language Models (LLMs), restrictions such as context window limits and session fragmentation pose significant barriers to the long-term accumulation of knowledge. This study proposes a &amp;ldquo;self-evolving framework&amp;rdquo; where an agent continuously records and refines its operational guidelines and technical knowledge—referred to as its SKILL—directly onto a local filesystem in a universally readable format (Markdown). By conducting experiments across two distinct environments featuring opaque constraints and complex legacy server rules using Google&amp;rsquo;s Antigravity and Gemini CLI, we demonstrate the efficacy of this framework. Our findings reveal that the agent effectively evolves its SKILL through iterative cycles of trial and error, ultimately saturating its learning. Furthermore, by transferring this evolved SKILL to a completely clean environment, we verify that the agent can successfully implement complete, flawless client applications in a single attempt (zero-shot generation). This methodology not only circumvents the limitations of short-term memory dependency but also pioneers a new paradigm for cross-environment knowledge portability and automated system analysis.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Adaptive Learning Agents with A2UI, Gemini, and Google Apps Script</title>
      <link>https://tanaikech.github.io/2026/02/07/building-adaptive-learning-agents-with-a2ui-gemini-and-google-apps-script/</link>
      <pubDate>Sat, 07 Feb 2026 11:11:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/02/07/building-adaptive-learning-agents-with-a2ui-gemini-and-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0f26de9e861353ef95caa8ec50411087&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260207a/fig1.jpg&#34;&#xA;     alt=&#34;Building Adaptive Learning Agents with A2UI, Gemini, and Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This article demonstrates how to build an adaptive learning agent using Agent-to-User Interface (A2UI), Gemini, and Google Apps Script. We explore a system that generates personalized quizzes, tracks performance in Google Sheets, and dynamically adjusts difficulty to maximize learning efficiency within the Google Workspace ecosystem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;A2UI (Agent-to-User Interface) represents a paradigm shift in how users interact with generative AI. Originally open-sourced by Google and implemented in TypeScript and Python &lt;a href=&#34;https://github.com/google/A2UI&#34;&gt;Ref&lt;/a&gt;, A2UI becomes even more powerful when integrated with Google Apps Script (GAS). This combination enables seamless access to the Google Workspace ecosystem, transforming static documents into intelligent, agentic applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beyond Chatbots: Building Task-Driven Agentic Interfaces in Google Workspace with A2UI and Gemini</title>
      <link>https://tanaikech.github.io/2026/02/03/beyond-chatbots-building-task-driven-agentic-interfaces-in-google-workspace-with-a2ui-and-gemini/</link>
      <pubDate>Tue, 03 Feb 2026 13:50:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/02/03/beyond-chatbots-building-task-driven-agentic-interfaces-in-google-workspace-with-a2ui-and-gemini/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3ca39a750381aaf4f0c19c75fe71ff8d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260203a/fig1.jpg&#34;&#xA;     alt=&#34;Beyond Chatbots: Building Task-Driven Agentic Interfaces in Google Workspace with A2UI and Gemini&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This article explores A2UI (Agent-to-User Interface) using Google Apps Script and Gemini. By generating dynamic HTML via structured JSON, Gemini transforms Workspace into an &amp;ldquo;Agent Hub.&amp;rdquo; This recursive UI loop enables complex workflows where the AI builds the specific functional tools required to execute tasks directly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction-the-evolution-of-ai-interaction&#34;&gt;Introduction: The Evolution of AI Interaction&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://github.com/google/A2UI&#34;&gt;Official A2UI framework&lt;/a&gt; by Google marks a significant paradigm shift in how we interact with artificial intelligence. Short for &lt;strong&gt;Agent-to-User Interface&lt;/strong&gt;, A2UI represents the evolution of Large Language Models (LLMs) from passive chatbots into active agents capable of designing their own functional interfaces. Building upon my previous research, &lt;a href=&#34;https://medium.com/google-cloud/a2ui-for-google-apps-script-bcd0f37a3774&#34;&gt;A2UI for Google Apps Script&lt;/a&gt; and &lt;a href=&#34;https://medium.com/google-cloud/bringing-a2ui-to-google-workspace-with-gemini-0d85026969b8&#34;&gt;Bringing A2UI to Google Workspace with Gemini&lt;/a&gt;, I have refined this integration to support sophisticated, stateful workflows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smart Stowage: Building a 3D Cargo Digital Twin with Gemini 3</title>
      <link>https://tanaikech.github.io/2026/01/21/smart-stowage-building-a-3d-cargo-digital-twin-with-gemini-3/</link>
      <pubDate>Wed, 21 Jan 2026 15:56:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/01/21/smart-stowage-building-a-3d-cargo-digital-twin-with-gemini-3/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/91204d67f6ca750a3dbf82d7680d86cf&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260121a/fig1a.jpg&#34;&#xA;     alt=&#34;Smart Stowage: Building a 3D Cargo Digital Twin with Gemini 3&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article details the development of &lt;strong&gt;Smart Stowage Optimizer&lt;/strong&gt;, a web-based digital twin for logistics that bridges the gap between physical safety and artificial intelligence. By integrating &lt;strong&gt;Gemini 3 Pro&lt;/strong&gt;, the system solves the &lt;strong&gt;3D Bin Packing Problem (3DBPP)&lt;/strong&gt; using advanced spatial reasoning. Built with &lt;strong&gt;React 19&lt;/strong&gt; and &lt;strong&gt;Three.js&lt;/strong&gt;, the application visualizes physics-aware load stability in real-time, offering a comparative analysis between traditional heuristic algorithms and modern generative AI agents.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bringing A2UI to Google Workspace with Gemini</title>
      <link>https://tanaikech.github.io/2026/01/19/bringing-a2ui-to-google-workspace-with-gemini/</link>
      <pubDate>Mon, 19 Jan 2026 14:19:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/01/19/bringing-a2ui-to-google-workspace-with-gemini/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cb98c1df4874d82d8f6c0f015c7ff8d3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260119a/fig1.jpg&#34;&#xA;     alt=&#34;Bringing A2UI to Google Workspace with Gemini&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article explores implementing the Agent-to-User Interface (A2UI) protocol within Google Apps Script. It demonstrates utilizing Gemini&amp;rsquo;s structured output to render secure, dynamic, server-driven UIs—like booking forms and event lists—directly inside Google Sheets, streamlining workflows without complex external infrastructure.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;I recently published a sample implementation demonstrating how to bring the Agent-to-User Interface (A2UI) concepts to Google Apps Script (GAS). &lt;a href=&#34;https://medium.com/google-cloud/a2ui-for-google-apps-script-bcd0f37a3774&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A2UI is an emerging open-standard protocol designed to enable AI agents to generate rich, interactive user interfaces that render natively across web, mobile, and desktop environments. &lt;a href=&#34;https://developers.googleblog.com/introducing-a2ui-an-open-project-for-agent-driven-interfaces/&#34;&gt;Ref&lt;/a&gt; Unlike traditional approaches that often require executing arbitrary, high-risk code to generate UI on the fly, A2UI leverages a strict schema-based data format to describe UI components. This &amp;ldquo;secure-by-design&amp;rdquo; architecture effectively mitigates security risks like Cross-Site Scripting (XSS) while ensuring high performance and cross-platform consistency.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Seamless Integration of Google Workspace and Gemini API via External URLs</title>
      <link>https://tanaikech.github.io/2026/01/15/seamless-integration-of-google-workspace-and-gemini-api-via-external-urls/</link>
      <pubDate>Thu, 15 Jan 2026 14:31:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/01/15/seamless-integration-of-google-workspace-and-gemini-api-via-external-urls/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bae3326b901191336afcaabb96c0825e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260115a/fig1.jpg&#34;&#xA;     alt=&#34;Seamless Integration of Google Workspace and Gemini API via External URLs&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API now supports external file URLs, allowing developers to process data directly without uploading it first. This article demonstrates how to leverage this update to integrate Google Workspace resources—including Google Sheets, Docs, Slides, and Apps Script—into Gemini’s workflow, covering both public and secure private access methods.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Recently, the limitations regarding inline file data in the Gemini API have been significantly updated &lt;a href=&#34;https://blog.google/innovation-and-ai/technology/developers-tools/gemini-api-new-file-limits/&#34;&gt;Ref&lt;/a&gt;. The maximum file size has increased from 20 MB to 100 MB. Furthermore, external file URLs—both public and signed—can now be used directly as input.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A2UI for Google Apps Script</title>
      <link>https://tanaikech.github.io/2026/01/08/a2ui-for-google-apps-script/</link>
      <pubDate>Thu, 08 Jan 2026 15:38:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/01/08/a2ui-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3960bee635dc5b80333588d27bb70936&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260108a/fig1.jpg&#34;&#xA;     alt=&#34;A2UI for Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article demonstrates how to implement Google&amp;rsquo;s A2UI (Agent-to-User Interface) using Google Apps Script (GAS). By porting official Python/TypeScript examples to GAS, we show how to create dynamic, AI-generated interfaces within Google Workspace, enabling flexible business automation and interactive user experiences without complex server infrastructure.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google recently released &lt;strong&gt;A2UI&lt;/strong&gt;, a protocol designed for agent-driven interfaces. &lt;a href=&#34;https://developers.googleblog.com/introducing-a2ui-an-open-project-for-agent-driven-interfaces/&#34;&gt;Ref&lt;/a&gt; A2UI enables AI agents to generate rich, interactive user interfaces that render natively across web, mobile, and desktop environments without executing arbitrary code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>StackOverflow Trends 2026: The Structural Shift from Human Support to Generative AI</title>
      <link>https://tanaikech.github.io/2026/01/03/stackoverflow-trends-2026-the-structural-shift-from-human-support-to-generative-ai/</link>
      <pubDate>Sat, 03 Jan 2026 16:04:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/01/03/stackoverflow-trends-2026-the-structural-shift-from-human-support-to-generative-ai/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/30b1fc76da0da8ff82b91af29c0c9f83&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; January 3, 2026&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Kanshi Tanaike&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Analyzing StackOverflow data (2008–2026) reveals a massive activity decline post-ChatGPT. Using Google Apps Script as a case study, this report quantifies the migration from human support to AI. We explore how the platform is pivoting from a help desk to a critical verification layer for AI-generated code to prevent model collapse.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;On StackOverflow, millions of developers engage in daily knowledge exchange, creating a historical repository of technological evolution. A prime example of this ecosystem is the &lt;code&gt;google-apps-script&lt;/code&gt; tag. Having participated in this community for years, I have observed its threads evolve in tandem with Google’s platform updates.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Statistics of my Activities from 2025-01-01 - 2025-12-31 on Stackoverflow</title>
      <link>https://tanaikech.github.io/2026/01/02/statistics-of-my-activities-from-2025-01-01-2025-12-31-on-stackoverflow/</link>
      <pubDate>Fri, 02 Jan 2026 16:23:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/01/02/statistics-of-my-activities-from-2025-01-01-2025-12-31-on-stackoverflow/</guid>
      <description>&lt;p&gt;URL: &lt;a href=&#34;https://stackoverflow.com/users/7108653/tanaike?tab=answers&amp;amp;sort=newest&#34;&gt;https://stackoverflow.com/users/7108653/tanaike?tab=answers&amp;amp;sort=newest&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the statistics of my activities from 2025-01-01 - 2025-12-31 on Stackoverflow.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Answers to stackoverflow&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I answered 35 answers.&lt;/li&gt;&#xA;&lt;li&gt;On January 02, 2026, the total view count is 7,795.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Answers to ja.stackoverflow&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I answered 1 answers.&lt;/li&gt;&#xA;&lt;li&gt;On January 02, 2026, the total view count is 292.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Total view counts: 8,087&lt;/p&gt;</description>
    </item>
    <item>
      <title>Overcoming Tool Space Interference: Bridging Google ADK and A2A SDK via Google Apps Script</title>
      <link>https://tanaikech.github.io/2026/01/01/overcoming-tool-space-interference-bridging-google-adk-and-a2a-sdk-via-google-apps-script/</link>
      <pubDate>Thu, 01 Jan 2026 16:37:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2026/01/01/overcoming-tool-space-interference-bridging-google-adk-and-a2a-sdk-via-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/37e4c20b090ad607d87f359b7ae72092&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20260101a/fig1.jpg&#34;&#xA;     alt=&#34;Overcoming Tool Space Interference: Bridging Google ADK and A2A SDK via Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article introduces a Google Apps Script-based Agent2Agent architecture to solve Tool Space Interference. While the provided demonstration utilizes a single server for testing purposes, the architecture is designed for distributed task execution. By running multiple category-specific A2A servers in parallel, users can achieve scalable, high-efficiency agent networks.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;As the Model Context Protocol (MCP) standardizes LLM connectivity, the Agent2Agent (A2A) paradigm is becoming essential for executing complex, multi-step tasks. However, integrating a high volume of tools often triggers &amp;ldquo;Tool Space Interference (TSI)&amp;quot;—a phenomenon where verbose metadata saturates context windows and degrades reasoning accuracy. &lt;a href=&#34;https://medium.com/google-cloud/nexus-mcp-a-unified-gateway-for-scalable-and-deterministic-mcp-server-aggregation-3211f0adc603&#34;&gt;Ref&lt;/a&gt; &lt;a href=&#34;https://www.microsoft.com/en-us/research/blog/tool-space-interference-in-the-mcp-era-designing-for-agent-compatibility-at-scale/&#34;&gt;Ref&lt;/a&gt; Current industry guidelines suggest a &amp;ldquo;soft limit&amp;rdquo; of 20 functions per agent; exceeding this threshold frequently results in hallucinations and logic failures.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nexus-MCP: A Unified Gateway for Scalable and Deterministic MCP Server Aggregation</title>
      <link>https://tanaikech.github.io/2025/12/25/nexus-mcp-a-unified-gateway-for-scalable-and-deterministic-mcp-server-aggregation/</link>
      <pubDate>Thu, 25 Dec 2025 15:24:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/12/25/nexus-mcp-a-unified-gateway-for-scalable-and-deterministic-mcp-server-aggregation/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5fe73221c32a4e1c665b9c8a7f506d70&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251225a/fig1.jpg&#34;&#xA;     alt=&#34;Nexus-MCP: A Unified Gateway for Scalable and Deterministic MCP Server Aggregation&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Nexus-MCP resolves &amp;ldquo;Tool Space Interference&amp;rdquo; in Large Language Models by aggregating multiple MCP servers into a single gateway. Utilizing a strictly deterministic 4-phase workflow—Discovery, Mapping, Schema Verification, and Bridged Execution—it prevents context saturation and tool hallucinations, enabling the use of massive tool ecosystems without sacrificing reasoning accuracy.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The integration of Gemini CLI and Google Antigravity with the Model Context Protocol (MCP) has significantly expanded the capabilities of LLM-based agents. However, this expansion introduces a critical performance bottleneck. As the number of available tools grows, Large Language Models (LLMs) suffer from a measurable decline in reasoning accuracy and tool-selection reliability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2025/12/12/updated-gas-library-utlapp/</link>
      <pubDate>Fri, 12 Dec 2025 16:03:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/12/12/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v1012&#34;&gt;UtlApp was updated to v1.0.12.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.12 (December 12, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Updated the method &lt;a href=&#34;https://github.com/tanaikech/UtlApp?tab=readme-ov-file#consolidatea1notations&#34;&gt;consolidateA1Notations&lt;/a&gt;. In the current version, the result is returned as an array. The array includes the combinations of the calculated result. The 1st element of the array is the best calculated result.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modularizing AI Agents: Integrating Google Apps Script Libraries with Gemini CLI and Antigravity</title>
      <link>https://tanaikech.github.io/2025/12/11/modularizing-ai-agents-integrating-google-apps-script-libraries-with-gemini-cli-and-antigravity/</link>
      <pubDate>Thu, 11 Dec 2025 13:39:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/12/11/modularizing-ai-agents-integrating-google-apps-script-libraries-with-gemini-cli-and-antigravity/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fb1526466e4b53d1f00981d4536659b8&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251211a/fig1.jpg&#34;&#xA;     alt=&#34;Modularizing AI Agents: Integrating Google Apps Script Libraries with Gemini CLI and Antigravity&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article introduces a major update to &lt;code&gt;gas-fakes&lt;/code&gt; enabling dynamic loading of Google Apps Script libraries. This enhancement allows developers to build modular, maintainable Model Context Protocol (MCP) servers. We demonstrate this by integrating sophisticated library-based tools with Gemini CLI and Google Antigravity for seamless Google Workspace automation.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;I recently published an article titled &amp;ldquo;&lt;a href=&#34;https://medium.com/google-cloud/power-of-google-apps-script-building-mcp-server-tools-for-gemini-cli-and-google-antigravity-in-71e754e4b740&#34;&gt;Power of Google Apps Script: Building MCP Server Tools for Gemini CLI and Google Antigravity in Google Workspace Automation&lt;/a&gt;.&amp;rdquo; In that piece, I demonstrated how to bridge the Model Context Protocol (MCP) with Google Workspace by implementing an MCP server using Google Apps Script (GAS) and &lt;code&gt;gas-fakes&lt;/code&gt;. This successfully established a communication channel for sophisticated AI agents—such as the Gemini CLI and Google Antigravity—to interact directly with Workspace data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Power of Google Apps Script: Building MCP Server Tools for Gemini CLI and Google Antigravity in Google Workspace Automation</title>
      <link>https://tanaikech.github.io/2025/12/03/power-of-google-apps-script-building-mcp-server-tools-for-gemini-cli-and-google-antigravity-in-google-workspace-automation/</link>
      <pubDate>Wed, 03 Dec 2025 14:37:40 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/12/03/power-of-google-apps-script-building-mcp-server-tools-for-gemini-cli-and-google-antigravity-in-google-workspace-automation/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e7ddfd23e51c0c4fd0278f873f46d752&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251203a/fig1.jpg&#34;&#xA;     alt=&#34;Power of Google Apps Script: Building MCP Server Tools for Gemini CLI and Google Antigravity in Google Workspace Automation&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article demonstrates how to build Model Context Protocol (MCP) tools directly using Google Apps Script. By leveraging the &lt;code&gt;gas-fakes&lt;/code&gt; CLI, developers can execute Google Apps Script locally to automate Google Workspace via Gemini CLI and Google Antigravity, streamlining development and eliminating the overhead of dynamic tool creation.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;With the rapid advancement of generative AI, ensuring the security of executing AI-generated scripts is of paramount importance to prevent arbitrary code execution vulnerabilities. Addressing this, I previously published a secure sandbox environment for Google Apps Script (GAS) known as &lt;code&gt;gas-fakes&lt;/code&gt;, which emulates the Apps Script environment locally. &lt;a href=&#34;https://medium.com/google-cloud/a-fake-sandbox-for-google-apps-script-a-feasibility-study-on-securely-executing-code-generated-by-cc985ce5dae3&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>A New Era for Google Apps Script: Unlocking the Future of Google Workspace Automation with Natural Language</title>
      <link>https://tanaikech.github.io/2025/12/01/a-new-era-for-google-apps-script-unlocking-the-future-of-google-workspace-automation-with-natural-language/</link>
      <pubDate>Mon, 01 Dec 2025 10:19:44 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/12/01/a-new-era-for-google-apps-script-unlocking-the-future-of-google-workspace-automation-with-natural-language/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/611d0cc0fe9733994ae547ab4dbe667c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251201a/fig1.jpg&#34;&#xA;     alt=&#34;A New Era for Google Apps Script: Unlocking the Future of Google Workspace Automation with Natural Language&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article redefines Google Apps Script (GAS) as a central integration hub in the AI era. It introduces the forefront of Google Workspace automation, realized through the fusion of the Model Context Protocol (MCP), Agent2Agent (A2A), and the Gemini CLI ecosystem. I cover everything from data integration bridging local and cloud environments (RAG) and sandbox technologies for safely executing AI-generated GAS, to the coordination of autonomous agents on the newly released Google Antigravity. We will explore next-generation work styles and implementation methods where complex workflows are completed autonomously through simple natural language instructions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrating Google Antigravity: Unlocking the Google Workspace Extension for Gemini CLI</title>
      <link>https://tanaikech.github.io/2025/11/25/integrating-google-antigravity-unlocking-the-google-workspace-extension-for-gemini-cli/</link>
      <pubDate>Tue, 25 Nov 2025 14:08:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/25/integrating-google-antigravity-unlocking-the-google-workspace-extension-for-gemini-cli/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/346eea6b858e3368d9b34475d1b70e54&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251125a/fig1.jpg&#34;&#xA;     alt=&#34;Integrating Google Antigravity: Unlocking the Google Workspace Extension for Gemini CLI&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article demonstrates how to integrate the Google Workspace Extension for Gemini CLI with Google Antigravity. It addresses a Model Context Protocol (MCP) tool naming incompatibility using a custom proxy script, enabling seamless, authenticated automation of Google Workspace tasks directly within the Antigravity IDE environment.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Since its release, the &lt;strong&gt;Gemini CLI&lt;/strong&gt; has been rapidly adopted across various development scenarios. &lt;a href=&#34;https://github.com/google-gemini/gemini-cli&#34;&gt;Ref&lt;/a&gt; Its utility increased significantly with the introduction of &lt;strong&gt;Gemini CLI Extensions&lt;/strong&gt;, which simplify the installation and management of Model Context Protocol (MCP) servers. &lt;a href=&#34;https://cloud.google.com/blog/products/ai-machine-learning/automate-app-deployment-and-security-analysis-with-new-gemini-cli-extensions?hl=en&#34;&gt;Ref&lt;/a&gt; Most recently, the &lt;strong&gt;Google Workspace Extension for Gemini CLI&lt;/strong&gt; was released by Google, providing an MCP server specifically designed to manage Workspace automation. &lt;a href=&#34;https://github.com/gemini-cli-extensions/workspace&#34;&gt;Ref&lt;/a&gt; A distinct advantage of this extension is its streamlined authorization process—authentication runs automatically when the Gemini CLI is launched, making it highly efficient.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://tanaikech.github.io/about/</link>
      <pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://tanaikech.github.io/about/</guid>
      <description>&lt;h1 id=&#34;about-me&#34;&gt;About Me&lt;/h1&gt;&#xA;&lt;p&gt;I am a Japanese scientist holding a Ph.D. in Physics and a &lt;a href=&#34;https://developers.google.com/community/experts/directory?text=tanaike&#34;&gt;Google Developer Expert (GDE)&lt;/a&gt; for Google Workspace. Recently, I was &lt;a href=&#34;https://tanaikech.github.io/2025/10/12/recipient-of-the-outstanding-google-developer-expert-award/&#34;&gt;awarded first place in the Outstanding GDE Award on September 26, 2025&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I am driven by a deep curiosity to explore the frontiers of physics, which fuels my creative thinking and innovation. Specifically, I have a passion for crafting entirely novel solutions—those that have not yet been introduced to the world. This passion for groundbreaking innovation informs my approach to every project I undertake. Interestingly, these new ideas often come to me during sleep; I then strive to bring them to life in the real world. Thankfully, some of these inventions have already found practical applications in diverse fields, including the electronics industry, industrial machinery, architecture, and the aerospace industry.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fields Builder for Google APIs: Visualizing Partial Responses</title>
      <link>https://tanaikech.github.io/2025/11/23/fields-builder-for-google-apis-visualizing-partial-responses/</link>
      <pubDate>Sun, 23 Nov 2025 11:52:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/23/fields-builder-for-google-apis-visualizing-partial-responses/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a83cd2487a5d93ec3e10cea43e7b96d6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251123a/demo.gif&#34;&#xA;     alt=&#34;Fields Builder for Google APIs: Visualizing Partial Responses&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Fields Builder for Google APIs is a client-side web application that streamlines constructing the &lt;code&gt;fields&lt;/code&gt; parameter. It parses Discovery documents into interactive trees, enabling developers to visually select nested resources, implement Partial Response, and optimize API payload sizes without manual syntax errors.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://sites.google.com/view/fields-builder&#34;&gt;FieldsBuilderForGoogleAPIs&lt;/a&gt;&lt;/strong&gt; is a specialized Web Application designed to streamline the construction of the &lt;code&gt;fields&lt;/code&gt; parameter for Google APIs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Agentic Automation in Google Workspace: Bridging Antigravity and Gemini 3.0</title>
      <link>https://tanaikech.github.io/2025/11/22/agentic-automation-in-google-workspace-bridging-antigravity-and-gemini-3.0/</link>
      <pubDate>Sat, 22 Nov 2025 14:43:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/22/agentic-automation-in-google-workspace-bridging-antigravity-and-gemini-3.0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/da7deaad19f75db0fd473e84e856529e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251122a/fig1.jpg&#34;&#xA;     alt=&#34;Agentic Automation in Google Workspace: Bridging Antigravity and Gemini 3.0&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article explores automating Google Workspace by integrating Google Antigravity and Gemini 3.0 with Model Context Protocol (MCP) servers. We demonstrate how to overcome tool limits and utilize custom extensions to enable AI agents to securely execute scripts, manage files, and perform RAG-based tasks using private data.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Antigravity and Gemini 3.0 are ushering in a new era of &amp;ldquo;Agent-First&amp;rdquo; development, transforming how we interact with cloud environments. &lt;a href=&#34;https://antigravity.google/&#34;&gt;Ref&lt;/a&gt; A key component of this evolution is the integration of Model Context Protocol (MCP) servers. When connected to Antigravity, these servers empower the architecture to resolve complex, multi-step tasks by granting the AI direct, standardized access to external tools and proprietary data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Next-Generation Google Apps Script Development: Leveraging Antigravity and Gemini 3.0</title>
      <link>https://tanaikech.github.io/2025/11/21/next-generation-google-apps-script-development-leveraging-antigravity-and-gemini-3.0/</link>
      <pubDate>Fri, 21 Nov 2025 15:20:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/21/next-generation-google-apps-script-development-leveraging-antigravity-and-gemini-3.0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/886e334d639ae4da4f18fe59ef0db0f0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251121a/fig1.jpg&#34;&#xA;     alt=&#34;Next-Generation Google Apps Script Development: Leveraging Antigravity and Gemini 3.0&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This article demonstrates a cutting-edge workflow for Google Apps Script development using Google Antigravity and Gemini 3.0. By integrating &lt;code&gt;gas-fakes&lt;/code&gt; via the Model Context Protocol (MCP), we establish an environment where autonomous agents can generate, unit-test, and execute cloud-based scripts locally, revolutionizing the standard GAS development lifecycle.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Google Antigravity has officially been released. &lt;a href=&#34;https://antigravity.google/&#34;&gt;Ref&lt;/a&gt; This is a revolutionary &amp;ldquo;Agent-first&amp;rdquo; IDE powered by Gemini 3, designed to empower autonomous AI agents to plan, code, and verify tasks across the Editor, Terminal, and Browser. It is anticipated that this platform will trigger a paradigm shift in how we develop applications and auto-generate comprehensive documentation, moving the industry from simple code completion to fully agentic workflows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - TableApp</title>
      <link>https://tanaikech.github.io/2025/11/20/gas-library-tableapp/</link>
      <pubDate>Thu, 20 Nov 2025 13:38:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/20/gas-library-tableapp/</guid>
      <description>&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;TableApp is a Google Apps Script library for managing Tables on Google Sheets.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;&#xA;&lt;p&gt;Recently, a new feature &amp;ldquo;Tables&amp;rdquo; was introduced to Google Sheets. Tables allow users to group data into structured tables with headers, filtering, and specific data types. While these can be managed via the Google Sheets API (v4), constructing the raw JSON requests for operations like creating, updating, and managing tables can be complex.&lt;/p&gt;&#xA;&lt;p&gt;This library, &lt;code&gt;TableApp&lt;/code&gt;, creates an object-oriented wrapper around the Google Sheets API, making it easy to manage Tables directly within Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simplify Google Sheets Tables Management with Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/11/20/simplify-google-sheets-tables-management-with-google-apps-script/</link>
      <pubDate>Thu, 20 Nov 2025 13:18:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/20/simplify-google-sheets-tables-management-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2b45026d0ec393507cef451a50fa8a04&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251120a/fig1.jpg&#34;&#xA;     alt=&#34;Simplify Google Sheets Tables Management with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article introduces &amp;ldquo;TableApp,&amp;rdquo; a Google Apps Script library designed to simplify managing Google Sheets Tables. It addresses the complexity of the native Sheets API, providing an intuitive interface for creating, updating, and manipulating tables. Sample scripts and installation guides are included to ensure easy implementation.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The introduction of Tables in Google Sheets has significantly enhanced data management capabilities. While these tables can be managed via the Sheets API, the process is often complex and verbose. I previously discussed this in my article, &lt;a href=&#34;https://medium.com/google-cloud/managing-tables-on-google-sheets-using-google-apps-script-02138f132781&#34;&gt;Managing Tables on Google Sheets using Google Apps Script&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Data Silos to Unified RAG: Gemini CLI Extensions Unify Local and Google Workspace for a Powerful File Search</title>
      <link>https://tanaikech.github.io/2025/11/15/from-data-silos-to-unified-rag-gemini-cli-extensions-unify-local-and-google-workspace-for-a-powerful-file-search/</link>
      <pubDate>Sat, 15 Nov 2025 11:01:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/15/from-data-silos-to-unified-rag-gemini-cli-extensions-unify-local-and-google-workspace-for-a-powerful-file-search/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/46573f903a3bf7aa96e9c4458a361d0c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251115a/fig1.jpg&#34;&#xA;     alt=&#34;From Data Silos to Unified RAG: Gemini CLI Extensions Unify Local and Google Workspace for a Powerful File Search&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article demonstrates how to create a unified file search for Gemini, integrating disconnected local files and Google Workspace data. Using a Google Apps Script-powered extension, users can directly ingest data from Drive, Sheets, and Gmail, enabling a powerful, context-aware RAG system.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;h2 id=&#34;1-the-challenge-of-data-silos&#34;&gt;1. The Challenge of Data Silos&lt;/h2&gt;&#xA;&lt;p&gt;In modern enterprises, data is fragmented. It lives on local machines, in Google Drive, within Google Sheets, and across countless emails. While the Gemini CLI excels at file searches, it traditionally requires manually downloading cloud files to a local environment before they can be used. This workflow is inefficient, error-prone, and creates unnecessary operational overhead, preventing the creation of a truly comprehensive knowledge base for Retrieval-Augmented Generation (RAG).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini CLI Extension: FileSearchStore-extension</title>
      <link>https://tanaikech.github.io/2025/11/11/gemini-cli-extension-filesearchstore-extension/</link>
      <pubDate>Tue, 11 Nov 2025 15:38:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/11/gemini-cli-extension-filesearchstore-extension/</guid>
      <description>&lt;p&gt;Here introduces a new Gemini CLI extension that integrates File Search feature. This tool establishes a fully managed Retrieval-Augmented Generation (RAG) system directly on the command line.&lt;/p&gt;&#xA;&lt;p&gt;The extension is designed to simplify the use of the Gemini API&amp;rsquo;s File Search, a powerful new feature that enables RAG grounded in personal or proprietary knowledge bases. While the underlying API requires scripting, this Node.js-built CLI extension allows users to seamlessly manage File Search stores and generate context-aware content grounded in their private documents without having to leave the terminal interface.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrating File Search with the Gemini CLI Extension</title>
      <link>https://tanaikech.github.io/2025/11/11/integrating-file-search-with-the-gemini-cli-extension/</link>
      <pubDate>Tue, 11 Nov 2025 15:27:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/11/integrating-file-search-with-the-gemini-cli-extension/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/468bb58319933303fef78816c6e9dc02&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251111a/fig1.jpg&#34;&#xA;     alt=&#34;Integrating File Search with the Gemini CLI Extension&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article introduces a Gemini CLI extension that integrates File Search feature. This tool provides a fully managed Retrieval-Augmented Generation (RAG) system directly in your command line, enabling content generation grounded in your private documents and data.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API recently introduced File Search, a powerful feature that enables Retrieval-Augmented Generation (RAG) using your own documents as a knowledge base. This allows you to generate content grounded in personal or proprietary information. While powerful, leveraging this via API calls requires scripting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modern Google Apps Script Workflow Building on the Cloud</title>
      <link>https://tanaikech.github.io/2025/11/05/modern-google-apps-script-workflow-building-on-the-cloud/</link>
      <pubDate>Wed, 05 Nov 2025 15:22:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/11/05/modern-google-apps-script-workflow-building-on-the-cloud/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f83fd9f6ee883268cfd8028161376b2c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251105a/fig1.jpg&#34;&#xA;     alt=&#34;Modern Google Apps Script Workflow Building on the Cloud&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article guides you through establishing a modern, cloud-based development workflow for Google Apps Script. Learn to leverage Google Cloud and Firebase Studio with powerful tools like the Gemini CLI and &lt;code&gt;gas-fakes&lt;/code&gt; to build, test, and deploy your automations with enhanced efficiency and security.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script is primarily designed to be created in a cloud-based script editor and run on the cloud. However, using Google Apps Script on various cloud platforms opens up the possibility of wider application development due to its high compatibility with each platform&amp;rsquo;s features.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bridging the Gap: Seamless Integration for Local Google Apps Script Development</title>
      <link>https://tanaikech.github.io/2025/10/30/bridging-the-gap-seamless-integration-for-local-google-apps-script-development/</link>
      <pubDate>Thu, 30 Oct 2025 15:59:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/30/bridging-the-gap-seamless-integration-for-local-google-apps-script-development/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/76ef51ea042fcc906b54a741d971c885&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251030a/fig1.jpg&#34;&#xA;     alt=&#34;Bridging the Gap: Seamless Integration for Local Google Apps Script Development&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This article explores the evolution of Google Apps Script (GAS) development, focusing on the powerful capabilities unlocked by the &lt;code&gt;gas-fakes&lt;/code&gt; CLI. Discover how to seamlessly integrate your local development environment with GAS, enabling you to use local files, execute scripts without uploading, and build a more efficient, modern workflow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Google Apps Script is a versatile platform that continues to evolve. A significant leap forward in its development is the ability to work with GAS projects locally, a paradigm shift driven by Bruce McPherson&amp;rsquo;s &lt;a href=&#34;https://github.com/brucemcpherson/gas-fakes&#34;&gt;&lt;code&gt;gas-fakes&lt;/code&gt;&lt;/a&gt;. This tool, and the ecosystem it has inspired, are changing how developers approach GAS development.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Next-Level Google Apps Script Development</title>
      <link>https://tanaikech.github.io/2025/10/29/next-level-google-apps-script-development/</link>
      <pubDate>Wed, 29 Oct 2025 16:41:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/29/next-level-google-apps-script-development/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/Next-Level-Google-Apps-Script-Development&#34;&gt;GitHub&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251029a/fig1.jpg&#34;&#xA;     alt=&#34;Next-Level Google Apps Script Development&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This article introduces a powerful method for developing and testing Google Apps Script (GAS) locally. By leveraging the &lt;code&gt;gas-fakes&lt;/code&gt; library, you can build a secure, local Model Context Protocol (MCP) server, enabling the creation of AI-powered tools for Google Workspace automation without deploying to the cloud.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/brucemcpherson/gas-fakes&#34;&gt;gas-fakes&lt;/a&gt;, developed by Bruce McPherson, is an innovative library that enables Google Apps Script (GAS) code to run directly in a local environment by substituting GAS classes and methods with their corresponding Google APIs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Secure and Streamlined Google Apps Script Development with gas-fakes CLI and Gemini CLI Extension</title>
      <link>https://tanaikech.github.io/2025/10/27/secure-and-streamlined-google-apps-script-development-with-gas-fakes-cli-and-gemini-cli-extension/</link>
      <pubDate>Mon, 27 Oct 2025 14:57:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/27/secure-and-streamlined-google-apps-script-development-with-gas-fakes-cli-and-gemini-cli-extension/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e1b57421876e958f5d7f0c5204557f04&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251027a/fig1.jpg&#34;&#xA;     alt=&#34;Secure and Streamlined Google Apps Script Development with gas-fakes CLI and Gemini CLI Extension&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This document introduces a powerful integration of the &lt;code&gt;gas-fakes&lt;/code&gt; CLI and a Gemini CLI extension, creating a secure and streamlined development workflow for Google Apps Script. This setup enables local testing of AI-generated scripts in a secure sandbox, preventing unintended access to your Google Drive, and provides a seamless transition to cloud deployment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://github.com/brucemcpherson/gas-fakes&#34;&gt;gas-fakes&lt;/a&gt; project by Bruce McPherson is a groundbreaking endeavor that recreates the Google Apps Script (GAS) execution environment on Node.js, enabling local testing and debugging. When Bruce invited me to join the project, I first started by understanding gas-fakes. The project enables local execution by converting GAS service calls (e.g., &lt;code&gt;SpreadsheetApp.create()&lt;/code&gt;) into corresponding Google API requests.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini CLI Extension for GAS Development Kit</title>
      <link>https://tanaikech.github.io/2025/10/26/gemini-cli-extension-for-gas-development-kit/</link>
      <pubDate>Sun, 26 Oct 2025 14:18:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/26/gemini-cli-extension-for-gas-development-kit/</guid>
      <description>&lt;p&gt;I created a Gemini CLI extension as a GAS Development Kit. For this, I developed the CLI of gas-fakes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;repository&#34;&gt;Repository&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/gas-development-kit-extension&#34;&gt;https://github.com/tanaikech/gas-development-kit-extension&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-install-gemini-cli&#34;&gt;1. Install Gemini CLI&lt;/h3&gt;&#xA;&lt;p&gt;First, install the &lt;a href=&#34;https://github.com/google-gemini/gemini-cli&#34;&gt;Gemini CLI&lt;/a&gt; using npm:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install -g @google/gemini-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next, you will need to authorize the CLI. Follow the instructions provided in the &lt;a href=&#34;https://github.com/google-gemini/gemini-cli?tab=readme-ov-file#-authentication-options&#34;&gt;official documentation&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-install-clasp&#34;&gt;2. Install Clasp&lt;/h3&gt;&#xA;&lt;p&gt;Even when Clasp is not installed, when gas-fakes is installed, you can run Google Apps Script in a sandbox using gas-fakes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Streamlining Google Apps Script Development with Gemini CLI Extensions and VSCode</title>
      <link>https://tanaikech.github.io/2025/10/21/streamlining-google-apps-script-development-with-gemini-cli-extensions-and-vscode/</link>
      <pubDate>Tue, 21 Oct 2025 16:28:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/21/streamlining-google-apps-script-development-with-gemini-cli-extensions-and-vscode/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0e12338ca99bbddc51fe69c07a1bc36f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251021a/fig1.jpg&#34;&#xA;     alt=&#34;Streamlining Google Apps Script Development with Gemini CLI Extensions and VSCode&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This guide explores a powerful, next-level workflow for Google Apps Script (GAS) development by integrating Gemini CLI Extensions with Visual Studio Code (VSCode). This combination streamlines the entire development process, from script creation and local testing in a secure sandbox to deploying and managing projects, all within a unified and efficient environment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Visual Studio Code (VSCode) is widely recognized as a premier source code editor. The release of the Gemini CLI has dramatically transformed script development by bringing advanced AI capabilities directly into the terminal. In particular, combining Gemini CLI with VSCode creates a powerful development ecosystem, highly effective for languages typically executed locally, such as Python, Node.js, Go and so on. Beyond coding, this setup streamlines content creation, including articles and papers, by leveraging AI for drafting and editing. &lt;a href=&#34;https://medium.com/google-cloud/streamlining-content-creation-a-guide-to-using-gemini-cli-mcp-server-and-vscode-e623c42419f5&#34;&gt;Ref&lt;/a&gt; For cloud-based Google Apps Script (GAS) development, the standard approach involves using VSCode alongside Clasp to manage projects locally. &lt;a href=&#34;https://github.com/google/clasp&#34;&gt;Ref&lt;/a&gt; Integrating Gemini CLI into this established workflow promises significant synergistic effects. A recent update has further expanded these possibilities by enabling Clasp to function experimentally as a Model Context Protocol (MCP) server, allowing LLMs to directly interact with GAS project structures. &lt;a href=&#34;https://github.com/google/clasp?tab=readme-ov-file#mcp-experimental&#34;&gt;Ref&lt;/a&gt; Furthermore, to address security concerns when executing AI-generated GAS code, I have introduced a &amp;ldquo;fake sandbox&amp;rdquo; environment for safer testing. &lt;a href=&#34;https://medium.com/google-cloud/a-fake-sandbox-for-google-apps-script-a-feasibility-study-on-securely-executing-code-generated-by-cc985ce5dae3&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://medium.com/google-cloud/secure-and-conversational-google-workspace-automation-integrating-gemini-cli-with-a-gas-fakes-mcp-0a5341559865&#34;&gt;Ref&lt;/a&gt; With the recent release of Gemini CLI Extensions, which allow for custom AI tools and specialized workflows, combining these assets creates a vastly superior developer environment. In this article, I will introduce next-level Google Apps Script development by leveraging the combined power of Gemini CLI Extensions and VSCode.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Developer&#39;s Guide to Building Gemini CLI Extensions</title>
      <link>https://tanaikech.github.io/2025/10/16/a-developers-guide-to-building-gemini-cli-extensions/</link>
      <pubDate>Thu, 16 Oct 2025 13:14:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/16/a-developers-guide-to-building-gemini-cli-extensions/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0a1426535ab3af0c68cf8d79bca770a0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251016a/fig1.jpg&#34;&#xA;     alt=&#34;A Developer&amp;#39;s Guide to Building Gemini CLI Extensions&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This guide offers a comprehensive walkthrough of the essential steps and key considerations for developing Gemini CLI extensions. It covers setting up a sample project, configuring the &lt;code&gt;gemini-extension.json&lt;/code&gt; file, local testing, and automating dependency management with GitHub Actions, providing developers with the foundational knowledge to create their own custom tools.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;After the release of Gemini CLI Extensions, a growing community of users is developing a wide range of extensions to enhance their command-line workflows. &lt;a href=&#34;https://cloud.google.com/blog/products/databases/gemini-cli-extensions-for-google-data-cloud?e=48754805&amp;amp;hl=en&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://geminicli.com/extensions/&#34;&gt;Ref&lt;/a&gt; This trend is expected to continue and strengthen. As the ecosystem expands, knowing how to develop these extensions becomes increasingly valuable for users who want to create their own custom tools. Many useful articles for understanding Gemini CLI Extensions have already been published. In particular, the articles by Romin Irani are very helpful. &lt;a href=&#34;https://medium.com/google-cloud/gemini-cli-tutorial-series-part-11-gemini-cli-extensions-69a6f2abb659&#34;&gt;Ref&lt;/a&gt; In this article, I would like to introduce the core parts I paid attention to when I developed my own extensions (&lt;a href=&#34;https://medium.com/google-cloud/simplified-google-workspace-automation-with-gemini-cli-extensions-cbd86bcd7948&#34;&gt;Ref&lt;/a&gt;). I hope this article proves useful. As a sample tool in this article, the current time is returned using Node.js.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini CLI Extension: ToolsForMCPServer-extension</title>
      <link>https://tanaikech.github.io/2025/10/15/gemini-cli-extension-toolsformcpserver-extension/</link>
      <pubDate>Wed, 15 Oct 2025 15:26:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/15/gemini-cli-extension-toolsformcpserver-extension/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-extension&#34;&gt;ToolsForMCPServer-extension&lt;/h2&gt;&#xA;&lt;p&gt;This Gemini CLI Extension simplifies Google Workspace automation. It installs a local Model Context Protocol (MCP) server that communicates with a powerful, securely authorized backend built on Google Apps Script Web Apps, overcoming previous complex setup and performance bottlenecks.&lt;/p&gt;&#xA;&lt;p&gt;You can see the details at my repository.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer-extension&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer-extension&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simplified Google Workspace Automation with Gemini CLI Extensions</title>
      <link>https://tanaikech.github.io/2025/10/15/simplified-google-workspace-automation-with-gemini-cli-extensions/</link>
      <pubDate>Wed, 15 Oct 2025 15:06:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/15/simplified-google-workspace-automation-with-gemini-cli-extensions/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8693efc439bac83b3aea38317fb7724f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251015a/fig1.jpg&#34;&#xA;     alt=&#34;Simplified Google Workspace Automation with Gemini CLI Extensions&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This project simplifies Google Workspace automation by using a Gemini CLI Extension. It installs a local Model Context Protocol (MCP) server that communicates with a powerful, securely authorized backend built on Google Apps Script Web Apps, overcoming previous complex setup and performance bottlenecks.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;In order to achieve Google Workspace Automation with seamless authorization and safety, I have published a Model Context Protocol (MCP) server built by Google Apps Script Web Apps. &lt;a href=&#34;https://medium.com/google-cloud/gemini-cli-with-mcp-server-expanding-possibilities-with-google-apps-script-4626c661ac81&#34;&gt;Ref&lt;/a&gt; This is very useful because Google Apps Script provides native, secure authorization for Google Workspace APIs like Gmail, Drive, and Calendar. However, there was a bottleneck in the complex installation and a long loading time of the MCP server. Recently, Gemini Extensions have been released. &lt;a href=&#34;https://cloud.google.com/blog/products/databases/gemini-cli-extensions-for-google-data-cloud?e=48754805&amp;amp;hl=en&#34;&gt;Ref&lt;/a&gt; By this, tools and MCP servers can be directly and easily installed from sources like GitHub repositories using a simple command. From this situation, I attempted to implement this simplified installation method on the MCP server built by Google Apps Script Web Apps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recipient of the Outstanding Google Developer Expert Award</title>
      <link>https://tanaikech.github.io/2025/10/12/recipient-of-the-outstanding-google-developer-expert-award/</link>
      <pubDate>Sun, 12 Oct 2025 09:13:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/12/recipient-of-the-outstanding-google-developer-expert-award/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251012a/trophy_outstanding_GDE_20250926_tanaike.jpg&#34;&#xA;     alt=&#34;Recipient of the Outstanding Google Developer Expert Award&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I am thrilled and deeply honored to be recognized with the &amp;ldquo;First place in the Outstanding GDE award&amp;rdquo;. This incredible honor inspires me to redouble my efforts in advancing new projects and further energizing our amazing community.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic Tool Creation for Google Workspace Automation with Gemini CLI</title>
      <link>https://tanaikech.github.io/2025/10/09/dynamic-tool-creation-for-google-workspace-automation-with-gemini-cli/</link>
      <pubDate>Thu, 09 Oct 2025 14:43:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/09/dynamic-tool-creation-for-google-workspace-automation-with-gemini-cli/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/91321df429b3e94f6a71176bd4ecafbb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251009a/fig1.jpg&#34;&#xA;     alt=&#34;Dynamic Tool Creation for Google Workspace Automation with Gemini CLI&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This article presents a method for optimizing Google Workspace automation by dynamically converting frequently used, AI-generated Google Apps Scripts into permanent, reusable tools. By integrating the Gemini CLI with a &lt;code&gt;gas-fakes&lt;/code&gt; sandbox via an MCP server, we demonstrate how to securely add and manage these custom tools, reducing operational costs and improving efficiency.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;When using generative AI to create scripts, ensuring the secure execution of the generated code is critical. This is especially true for applications that manage cloud resources like Google Workspace, where it is paramount to prevent unintended data access or modification. The standard permission model for Google Apps Script often requires broad access, creating a significant security risk when running code from untrusted sources.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Collaborative Dialogue Between Gemini CLI and Copilot CLI Through MCP</title>
      <link>https://tanaikech.github.io/2025/10/02/a-collaborative-dialogue-between-gemini-cli-and-copilot-cli-through-mcp/</link>
      <pubDate>Thu, 02 Oct 2025 14:59:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/10/02/a-collaborative-dialogue-between-gemini-cli-and-copilot-cli-through-mcp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e6c41eec8b1fac74979af45ab86c7e7e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20251002a/fig1.jpg&#34;&#xA;     alt=&#34;A Collaborative Dialogue Between Gemini CLI and Copilot CLI Through MCP&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This article introduces a method for integrating Google&amp;rsquo;s Gemini CLI and GitHub&amp;rsquo;s Copilot CLI using the Model Context Protocol (MCP). By configuring one CLI as an MCP server, the other can invoke it from a prompt, enabling a powerful, collaborative interaction between the two AI assistants for enhanced development workflows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Recently, GitHub released the &lt;a href=&#34;https://github.com/github/copilot-cli&#34;&gt;Copilot CLI&lt;/a&gt;, a command-line interface that brings the power of GitHub Copilot directly to your terminal. It assists with various tasks, including answering questions, writing code, and interacting with GitHub. Concurrently, Google has already introduced the &lt;a href=&#34;https://github.com/google-gemini/gemini-cli&#34;&gt;Gemini CLI&lt;/a&gt;, an open-source AI agent that integrates the Gemini models into the command line to help developers with coding, problem-solving, and task management.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Secure and Conversational Google Workspace Automation: Integrating Gemini CLI with a gas-fakes MCP Server</title>
      <link>https://tanaikech.github.io/2025/09/30/secure-and-conversational-google-workspace-automation-integrating-gemini-cli-with-a-gas-fakes-mcp-server/</link>
      <pubDate>Tue, 30 Sep 2025 16:15:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/09/30/secure-and-conversational-google-workspace-automation-integrating-gemini-cli-with-a-gas-fakes-mcp-server/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e995c03ff066f38a208fa473ac47132b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250930a/fig1.jpg&#34;&#xA;     alt=&#34;Secure and Conversational Google Workspace Automation: Integrating Gemini CLI with a gas-fakes MCP Server&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article introduces a method for securely executing AI-generated Google Apps Script. By implementing a &amp;ldquo;fake-sandbox&amp;rdquo; using the gas-fakes library as an MCP server, users can empower the Gemini CLI to safely automate Google Workspace tasks with granular, file-specific permissions, avoiding significant security risks.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;&amp;ldquo;Have you ever faced a task that isn&amp;rsquo;t part of your routine but is tedious to do manually, like, &amp;lsquo;I need to add a &amp;ldquo;[For Review]&amp;rdquo; prefix to the titles of all Google Docs in a specific folder this afternoon&amp;rsquo;? Or perhaps you&amp;rsquo;ve thought, &amp;lsquo;I want to use AI to work with my spreadsheets, but I&amp;rsquo;m concerned about the security implications of granting a tool full access to my Google Drive&amp;rsquo;?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Streamlining Content Creation: A Guide to Using Gemini CLI, MCP Server, and VSCode</title>
      <link>https://tanaikech.github.io/2025/09/24/streamlining-content-creation-a-guide-to-using-gemini-cli-mcp-server-and-vscode/</link>
      <pubDate>Wed, 24 Sep 2025 15:14:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/09/24/streamlining-content-creation-a-guide-to-using-gemini-cli-mcp-server-and-vscode/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4d2c8418bb8b576aa9c560dde0f54a2f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250924a/fig1.jpg&#34;&#xA;     alt=&#34;Streamlining Content Creation: A Guide to Using Gemini CLI, MCP Server, and VSCode&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This guide explores a powerful workflow for generating articles and other content by integrating Gemini CLI, a Model Context Protocol (MCP) server, and Visual Studio Code (VSCode). Discover how to leverage this combination for efficient, context-aware content creation, modification, and distribution, complete with practical examples and prompts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The integration of Gemini CLI with Visual Studio Code (VSCode) creates a highly efficient and context-aware environment for developers and writers alike. This setup allows the AI-powered Gemini CLI to access the VSCode workspace, making it aware of open files and selected text to provide relevant and targeted suggestions. A key feature is the native in-editor diffing, which enables a side-by-side review and modification of AI-generated changes before acceptance, offering greater control over the final output.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accelerating Gemini CLI: A Node.js Wrapper for Google Apps Script MCP Servers</title>
      <link>https://tanaikech.github.io/2025/09/17/accelerating-gemini-cli-a-node.js-wrapper-for-google-apps-script-mcp-servers/</link>
      <pubDate>Wed, 17 Sep 2025 16:09:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/09/17/accelerating-gemini-cli-a-node.js-wrapper-for-google-apps-script-mcp-servers/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1d7f0090834431d03194e58ebffdb660&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250917a/fig1.jpg&#34;&#xA;     alt=&#34;Accelerating Gemini CLI: A Node.js Wrapper for Google Apps Script MCP Servers&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This article introduces a Node.js wrapper that dramatically reduces the startup time for the Gemini CLI when used with MCP servers built on Google Apps Script. This optimization enhances user experience by accelerating the initialization process, achieving a speed boost of approximately 15 times.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The Model Context Protocol (MCP) is a vital open standard enabling AI agents to connect with external tools and data sources for complex, real-world tasks. To integrate the Gemini AI agent with Google Workspace, I developed two open-source tools: &lt;a href=&#34;https://github.com/tanaikech/MCPApp&#34;&gt;MCPApp&lt;/a&gt;, for managing the MCP server lifecycle, and &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;ToolsForMCPServer&lt;/a&gt;, a suite of tools for interacting with services like Gmail and Drive. These are built with Google Apps Script for use with the &lt;a href=&#34;https://github.com/google-gemini/gemini-cli&#34;&gt;Gemini CLI&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/09/15/updated-gas-library-toolsformcpserver/</link>
      <pubDate>Mon, 15 Sep 2025 15:09:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/09/15/updated-gas-library-toolsformcpserver/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-was-updated-to-v1029&#34;&gt;ToolsForMCPServer was updated to v1.0.29&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.29 (September 15, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The following 5 tools were added. These tools provide the information for building the request body of Google APIs.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;explanation_analytics_data_properties_runReport&lt;/li&gt;&#xA;&lt;li&gt;explanation_analytics_data_properties_runRealtimeReport&lt;/li&gt;&#xA;&lt;li&gt;explanation_manage_google_sheets_using_sheets_api&lt;/li&gt;&#xA;&lt;li&gt;explanation_manage_google_docs_using_docs_api&lt;/li&gt;&#xA;&lt;li&gt;explanation_manage_google_slides_using_slides_api&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The following 8 tools were updated.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;get_google_sheet_object_using_sheets_api&lt;/li&gt;&#xA;&lt;li&gt;manage_google_sheets_using_sheets_api&lt;/li&gt;&#xA;&lt;li&gt;get_google_doc_object_using_docs_api&lt;/li&gt;&#xA;&lt;li&gt;manage_google_docs_using_docs_api&lt;/li&gt;&#xA;&lt;li&gt;get_google_slides_object_using_slides_api&lt;/li&gt;&#xA;&lt;li&gt;manage_google_slides_using_slides_api&lt;/li&gt;&#xA;&lt;li&gt;analytics_data_properties_runReport&lt;/li&gt;&#xA;&lt;li&gt;analytics_data_properties_runRealtimeReport&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detailed information here &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/09/11/updated-gas-library-toolsformcpserver/</link>
      <pubDate>Thu, 11 Sep 2025 10:36:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/09/11/updated-gas-library-toolsformcpserver/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-was-updated-to-v1028&#34;&gt;ToolsForMCPServer was updated to v1.0.28&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.28 (September 11, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The following 9 tools were added.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;create_document_body_in_google_docs&lt;/li&gt;&#xA;&lt;li&gt;remove_files_on_google_drive&lt;/li&gt;&#xA;&lt;li&gt;maps_get_route&lt;/li&gt;&#xA;&lt;li&gt;maps_convert_location_to_lat_lon&lt;/li&gt;&#xA;&lt;li&gt;maps_convert_lat_lon_to_location&lt;/li&gt;&#xA;&lt;li&gt;maps_create_map&lt;/li&gt;&#xA;&lt;li&gt;explanation_create_maps_url&lt;/li&gt;&#xA;&lt;li&gt;explanation_reference_generate_google_apps_script&lt;/li&gt;&#xA;&lt;li&gt;explanation_reference_export_google_sheets_as_pdf&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A bug of a tool &amp;ldquo;convert_mimetype_of_file_on_google_drive&amp;rdquo; was removed. This is from &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer/issues/11&#34;&gt;this issue report&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detailed information here &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Maps with Natural Language: Integrated Collaboration through Gemini CLI and MCP</title>
      <link>https://tanaikech.github.io/2025/09/11/google-maps-with-natural-language-integrated-collaboration-through-gemini-cli-and-mcp/</link>
      <pubDate>Thu, 11 Sep 2025 10:16:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/09/11/google-maps-with-natural-language-integrated-collaboration-through-gemini-cli-and-mcp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/09db6dd910b458b6d0d97d43cc60209f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250911a/fig1.jpg&#34;&#xA;     alt=&#34;Google Maps with Natural Language: Integrated Collaboration through Gemini CLI and MCP&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This article demonstrates integrating Google Maps with natural language using the Gemini CLI and an MCP server. This powerful combination allows users to automate complex location-based tasks, such as route planning and information retrieval, through simple, intuitive text-based prompts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The Gemini CLI, when paired with Model Context Protocol (MCP) servers, is a powerful tool for integrating various applications with natural language. When the MCP servers are built using Google Apps Script Web Apps, it becomes easy to integrate Google Workspace and other Google APIs with seamless authorization. This concept has been explored in several articles, which you can find here: &lt;a href=&#34;https://medium.com/google-cloud/gemini-cli-with-mcp-server-expanding-possibilities-with-google-apps-script-4626c661ac81&#34;&gt;Ref&lt;/a&gt;, &lt;a href=&#34;https://medium.com/google-cloud/gemini-cli-featuring-an-enhanced-toolsformcpserver-7afaadfb5cfa&#34;&gt;Ref&lt;/a&gt;, &lt;a href=&#34;https://medium.com/google-cloud/next-level-data-automation-gemini-cli-google-sheets-and-mcp-e6628a382e90&#34;&gt;Ref&lt;/a&gt;, &lt;a href=&#34;https://medium.com/google-cloud/next-level-data-automation-gemini-cli-google-calendar-and-mcp-1b9e39e75f34&#34;&gt;Ref&lt;/a&gt;, &lt;a href=&#34;https://medium.com/google-cloud/next-level-classroom-automation-gemini-cli-google-classroom-and-mcp-ac4bb9103fa6&#34;&gt;Ref&lt;/a&gt;, &lt;a href=&#34;https://medium.com/google-cloud/unifying-google-workspace-with-natural-language-integrated-collaboration-through-gemini-cli-and-a40489ddf17e&#34;&gt;Ref&lt;/a&gt;, &lt;a href=&#34;https://medium.com/google-cloud/streamlining-web-page-insights-with-natural-language-using-gemini-cli-google-analytics-and-mcp-1774d2b735b7&#34;&gt;Ref&lt;/a&gt;. This article introduces the integration of Google Maps and natural language using the Gemini CLI with an MCP server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Fake-Sandbox for Google Apps Script: A Feasibility Study on Securely Executing Code Generated by Gemini CLI</title>
      <link>https://tanaikech.github.io/2025/08/30/a-fake-sandbox-for-google-apps-script-a-feasibility-study-on-securely-executing-code-generated-by-gemini-cli/</link>
      <pubDate>Sat, 30 Aug 2025 16:31:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/08/30/a-fake-sandbox-for-google-apps-script-a-feasibility-study-on-securely-executing-code-generated-by-gemini-cli/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0896697c24cf4b9e1b1038303cf734ae&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250830a/fig1.jpg&#34;&#xA;     alt=&#34;A Fake-Sandbox for Google Apps Script: A Feasibility Study on Securely Executing Code Generated by Gemini CLI&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Generating Google Apps Script (GAS) with Gemini CLI from natural language introduces security risks due to broad permissions. This report investigates a &amp;ldquo;Fake-Sandbox&amp;rdquo; using the &lt;code&gt;gas-fakes&lt;/code&gt; library, translating GAS calls into granularly-scoped API requests to securely execute scripts created from user prompts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-background-generative-ai-and-the-challenge-of-secure-script-execution&#34;&gt;1. Background: Generative AI and the Challenge of Secure Script Execution&lt;/h3&gt;&#xA;&lt;p&gt;The emergence of Generative AI now makes it possible to generate executable scripts directly from natural language instructions, particularly through interfaces like the &lt;strong&gt;Gemini CLI&lt;/strong&gt;. For locally executable languages such as JavaScript (Node.js) and Python, code generated from a simple prompt can be run directly. However, Google Apps Script (GAS) presents a unique challenge as it operates within Google&amp;rsquo;s server-side infrastructure. Executing locally generated GAS code requires the remote invocation of a server-side function via the &lt;code&gt;scripts.run&lt;/code&gt; method of the Apps Script API. This process highlights the critical need for a &lt;strong&gt;sandbox environment&lt;/strong&gt; to manage permissions effectively and mitigate the risks associated with executing code generated from natural language, which can sometimes produce unintended or insecure outcomes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/08/22/updated-gas-library-toolsformcpserver/</link>
      <pubDate>Fri, 22 Aug 2025 16:33:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/08/22/updated-gas-library-toolsformcpserver/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-was-updated-to-v1027&#34;&gt;ToolsForMCPServer was updated to v1.0.27&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.27 (August 22, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Following 6 tools for Google Analytics were added.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;analytics_admin_accountSummaries_list&lt;/code&gt;: Retrieves a list of all Google Analytics accounts accessible by the current user&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;analytics_admin_properties_get&lt;/code&gt;: Get detailed information about a single Google Analytics property&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;analytics_data_properties_runReport&lt;/code&gt;: Fetches a custom report from a Google Analytics property&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;analytics_data_properties_runRealtimeReport&lt;/code&gt;: Generates a customized report of real-time event data from a Google Analytics property&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detailed information here &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Streamlining Web Page Insights with Natural Language using Gemini CLI, Google Analytics, and MCP</title>
      <link>https://tanaikech.github.io/2025/08/22/streamlining-web-page-insights-with-natural-language-using-gemini-cli-google-analytics-and-mcp/</link>
      <pubDate>Fri, 22 Aug 2025 16:24:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/08/22/streamlining-web-page-insights-with-natural-language-using-gemini-cli-google-analytics-and-mcp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1960fb03a38a13363f86966b4fcebbb5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250822a/fig1.jpg&#34;&#xA;     alt=&#34;Streamlining Web Page Insights with Natural Language using Gemini CLI, Google Analytics, and MCP&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This report introduces a powerful method for automating Google Analytics tasks using the Gemini CLI and a custom MCP (Model Context Protocol) server built with Google Apps Script. This integration enables streamlined web page analysis through simple natural language commands, simplifying authorization and complex data retrieval workflows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Accessing and interpreting web analytics data often involves navigating complex interfaces and manual report generation. However, the emergence of natural language interfaces is changing this paradigm. Gemini CLI, when paired with MCP servers, allows users to orchestrate sophisticated, multi-step workflows using conversational commands. This creates a more intuitive and efficient way to interact with powerful services like Google Analytics.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unifying Google Workspace with Natural Language: Integrated Collaboration through Gemini CLI and MCP</title>
      <link>https://tanaikech.github.io/2025/08/18/unifying-google-workspace-with-natural-language-integrated-collaboration-through-gemini-cli-and-mcp/</link>
      <pubDate>Mon, 18 Aug 2025 16:12:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/08/18/unifying-google-workspace-with-natural-language-integrated-collaboration-through-gemini-cli-and-mcp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/625e26dd9cf002311731ce5194b9e810&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250818a/fig1.jpg&#34;&#xA;     alt=&#34;Unifying Google Workspace with Natural Language: Integrated Collaboration through Gemini CLI and MCP&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This document demonstrates a transformative method for unifying Google Workspace applications by using natural language. Through the integration of the Gemini CLI with MCP, this approach empowers users to intuitively manage Google Drive, Gmail, Google Calendar, Drive Activity, and Google People. Complex tasks and collaborative workflows are streamlined into simple, conversational text commands.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In today&amp;rsquo;s dynamic, collaborative environments, managing document workflows, tracking changes, and coordinating team efforts can be fragmented and inefficient. This article introduces a powerful solution that unifies these processes by leveraging the &lt;a href=&#34;https://github.com/google-gemini/gemini-cli&#34;&gt;Gemini CLI&lt;/a&gt; and &lt;a href=&#34;https://modelcontextprotocol.io/docs/getting-started/intro&#34;&gt;MCP (Model Context Protocol)&lt;/a&gt;. This integration breaks down the barriers between applications, allowing users to orchestrate complex tasks across Google Workspace with natural language prompts. Whether you&amp;rsquo;re finding a file in Drive, checking its comment history, retrieving contributor details from Contacts, and drafting a thank-you email in Gmail, these actions can now be executed from a single, conversational interface, dramatically boosting productivity.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Next-Level Classroom Automation: Gemini CLI, Google Classroom, and MCP</title>
      <link>https://tanaikech.github.io/2025/08/10/next-level-classroom-automation-gemini-cli-google-classroom-and-mcp/</link>
      <pubDate>Sun, 10 Aug 2025 14:20:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/08/10/next-level-classroom-automation-gemini-cli-google-classroom-and-mcp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/be36c5f544a5e6e1a25c0cff3db04ba6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250810a/fig1.jpg&#34;&#xA;     alt=&#34;Next-Level Classroom Automation: Gemini CLI, Google Classroom, and MCP&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Automate Google Classroom management with natural language. This guide details using the Gemini CLI and an MCP server to streamline creating classes, managing assignments, and interacting with students.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Unlock the power of natural language to command your Google Workspace. I&amp;rsquo;ve recently demonstrated how you can automate Google Workspace applications using simple, conversational commands through the Gemini CLI and the MCP (Model Context Protocol) server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - MCPApp</title>
      <link>https://tanaikech.github.io/2025/08/06/updated-gas-library-mcpapp/</link>
      <pubDate>Wed, 06 Aug 2025 10:38:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/08/06/updated-gas-library-mcpapp/</guid>
      <description>&lt;h2 id=&#34;mcpapp-was-updated-to-v207&#34;&gt;MCPApp was updated to v2.0.7&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.7 (August 6, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Starting with v2.0.7, you can now selectively enable or disable the &lt;strong&gt;LockService&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By default, this library runs with the LockService enabled. To disable it, simply modify &lt;code&gt;return new MCPApp.mcpApp({ accessKey: &amp;quot;sample&amp;quot; })&lt;/code&gt; to &lt;code&gt;return new MCPApp.mcpApp({ accessKey: &amp;quot;sample&amp;quot;, lock: false })&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;When the LockService is disabled (&lt;code&gt;lock: false&lt;/code&gt;), asynchronous requests from clients like the Gemini CLI may see an increase in processing speed. However, it&amp;rsquo;s important to note that the maximum number of concurrent requests must not exceed 30. Please use this option with caution.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/MCPApp&#34;&gt;https://github.com/tanaikech/MCPApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/08/01/updated-gas-library-toolsformcpserver/</link>
      <pubDate>Fri, 01 Aug 2025 16:37:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/08/01/updated-gas-library-toolsformcpserver/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-was-updated-to-v1013&#34;&gt;ToolsForMCPServer was updated to v1.0.13&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.13 (August 1, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;prompts/get&lt;/code&gt; was updated. And, 3 prompts were added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detailed information here &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - MCPApp</title>
      <link>https://tanaikech.github.io/2025/08/01/updated-gas-library-mcpapp/</link>
      <pubDate>Fri, 01 Aug 2025 16:35:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/08/01/updated-gas-library-mcpapp/</guid>
      <description>&lt;h2 id=&#34;mcpapp-was-updated-to-v206&#34;&gt;MCPApp was updated to v2.0.6&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.6 (August 1, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&amp;ldquo;prompts/get&amp;rdquo; method was updated.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/MCPApp&#34;&gt;https://github.com/tanaikech/MCPApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enhanced Guide to Using Prompts in Gemini CLI</title>
      <link>https://tanaikech.github.io/2025/08/01/enhanced-guide-to-using-prompts-in-gemini-cli/</link>
      <pubDate>Fri, 01 Aug 2025 16:08:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/08/01/enhanced-guide-to-using-prompts-in-gemini-cli/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/68d72654c8b7ca9879388051230a17ae&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This report provides a comprehensive overview of how to utilize prompts within the Gemini Command-Line Interface (CLI). Leveraging a Google Apps Script MCP server, we will explore practical examples, including roadmap generation, real-time weather inquiries, and Google Drive file searches. This enhanced document offers more in-depth explanations and a broader context to empower users in their understanding and application of these powerful features.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The Model Context Protocol (MCP) establishes a standardized framework for servers to offer clients predefined, structured prompt templates. These user-controllable prompts, customizable with arguments, are engineered to streamline interactions with large language models. The Gemini CLI, starting with version v0.1.15, integrates support for these prompts, significantly expanding its capabilities.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/07/31/updated-gas-library-toolsformcpserver/</link>
      <pubDate>Thu, 31 Jul 2025 10:20:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/31/updated-gas-library-toolsformcpserver/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-was-updated-to-v1012&#34;&gt;ToolsForMCPServer was updated to v1.0.12&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.12 (July 31, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;At Gemini CLI v0.1.15, &lt;code&gt;prompts/list&lt;/code&gt; was called even when &lt;strong&gt;&lt;code&gt;prompts&lt;/code&gt; wasn&amp;rsquo;t included in &lt;code&gt;capabilities&lt;/code&gt;&lt;/strong&gt;. This resulted in the error &lt;code&gt;Error discovering prompts from gas_web_apps: MCP error -32001: Request timed out&lt;/code&gt; when &lt;code&gt;prompts&lt;/code&gt; wasn&amp;rsquo;t returned for &lt;code&gt;prompts/list&lt;/code&gt;. To resolve this, I updated &lt;code&gt;ToolsForMCPServer&lt;/code&gt; to &lt;strong&gt;return an empty array for &lt;code&gt;prompts&lt;/code&gt;&lt;/strong&gt;, which eliminated the error. Consequently, with this update in v1.0.12, you can now &lt;strong&gt;set custom &lt;code&gt;prompts&lt;/code&gt; and &lt;code&gt;resources&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detailed information here &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - MCPApp</title>
      <link>https://tanaikech.github.io/2025/07/31/updated-gas-library-mcpapp/</link>
      <pubDate>Thu, 31 Jul 2025 10:17:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/31/updated-gas-library-mcpapp/</guid>
      <description>&lt;h2 id=&#34;mcpapp-was-updated-to-v205&#34;&gt;MCPApp was updated to v2.0.5&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.5 (July 31, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A bug was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/MCPApp&#34;&gt;https://github.com/tanaikech/MCPApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Next-Level Data Automation: Gemini CLI, Google Calendar, and MCP</title>
      <link>https://tanaikech.github.io/2025/07/29/next-level-data-automation-gemini-cli-google-calendar-and-mcp/</link>
      <pubDate>Tue, 29 Jul 2025 13:33:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/29/next-level-data-automation-gemini-cli-google-calendar-and-mcp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f27e5a6633093b9cf929cb4fb569021f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250729a/fig1d.jpg&#34;&#xA;     alt=&#34;Next-Level Data Automation: Gemini CLI, Google Calendar, and MCP&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This report demonstrates managing Google Calendar from the command line using Gemini CLI and an MCP server, enabling powerful, scriptable automation for your schedule.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Following up on my previous report, &amp;ldquo;Next-Level Data Automation: Gemini CLI, Google Sheets, and MCP,&amp;rdquo; I&amp;rsquo;m excited to present the next installment in this series. My earlier report, published on Medium, detailed an innovative approach to managing Google Sheets through the powerful combination of Gemini CLI and an MCP server. &lt;a href=&#34;https://medium.com/google-cloud/next-level-data-automation-gemini-cli-google-sheets-and-mcp-e6628a382e90&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/07/26/updated-gas-library-toolsformcpserver/</link>
      <pubDate>Sat, 26 Jul 2025 15:04:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/26/updated-gas-library-toolsformcpserver/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-was-updated-to-v1010&#34;&gt;ToolsForMCPServer was updated to v1.0.10&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.10 (July 26, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When I updated Gemini CLI from v0.1.12 to v0.1.13, an issue related to the schema of MCP occurred. &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer/issues/2&#34;&gt;Ref&lt;/a&gt; So, as a workaround at the time, I updated this library. But when I updated Gemini CLI to v0.1.14, I confirmed that the previous schema could be used. So, I reimplemented the previous schema. By this, the request body for APIs can be directly generated using Gemini CLI v0.1.14.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detailed information here &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/07/24/updated-gas-library-toolsformcpserver/</link>
      <pubDate>Thu, 24 Jul 2025 13:43:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/24/updated-gas-library-toolsformcpserver/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-was-updated-to-v109&#34;&gt;ToolsForMCPServer was updated to v1.0.9&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.9 (July 24, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The following 2 new tools were added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;description_youtube: Describe a YouTube video by providing the URL.&lt;/li&gt;&#xA;&lt;li&gt;create_google_docs_from_markdown_on_google_drive: Create a Google Document from a markdown format.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detailed information here &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/07/23/updated-gas-library-toolsformcpserver/</link>
      <pubDate>Wed, 23 Jul 2025 13:11:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/23/updated-gas-library-toolsformcpserver/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-was-updated-to-v108&#34;&gt;ToolsForMCPServer was updated to v1.0.8&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.8 (July 23, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;An issue occurred when I updated Gemini CLI from v0.1.12 to v0.1.13. &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer/issues/2&#34;&gt;Ref&lt;/a&gt; Fortunately, Google is already aware of this issue, and I&amp;rsquo;m awaiting a resolution. In the meantime, I&amp;rsquo;ve received emails about it, so I&amp;rsquo;ve updated ToolsForMCPServer for Gemini CLI v0.1.13. The detailed updates are as follows: I confirmed that all tools in ToolsForMCPServer v1.0.8 worked when tested with Gemini CLI v0.1.13.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;oneOf&lt;/code&gt; has been removed from the schema of each tool.&lt;/li&gt;&#xA;&lt;li&gt;Following &lt;a href=&#34;https://medium.com/google-cloud/generating-request-body-for-apis-using-gemini-43977961ca2a&#34;&gt;this report&lt;/a&gt;, the request body is now generated on the MCP server side. Therefore, when using the tools &lt;code&gt;manage_google_docs_using_docs_api&lt;/code&gt;, &lt;code&gt;manage_google_sheets_using_sheets_api&lt;/code&gt;, and &lt;code&gt;manage_google_slides_using_slides_api&lt;/code&gt;, please use your API key for the Gemini API.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detailed information here &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generating Request Body for APIs using Gemini</title>
      <link>https://tanaikech.github.io/2025/07/23/generating-request-body-for-apis-using-gemini/</link>
      <pubDate>Wed, 23 Jul 2025 09:12:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/23/generating-request-body-for-apis-using-gemini/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5c5903553f3fa6f1640229dc88e57901&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250723a/fig1.jpg&#34;&#xA;     alt=&#34;Generating Request Body for APIs using Gemini&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Effortlessly generate API request bodies from natural language commands. This guide demonstrates using Gemini and Google Apps Script to streamline automation and accelerate development for Google Workspace APIs and beyond.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In a recent article, &amp;ldquo;&lt;a href=&#34;https://medium.com/google-cloud/managing-google-docs-sheets-and-slides-by-natural-language-with-gemini-cli-and-mcp-62f4dfbef2d5&#34;&gt;Managing Google Docs, Sheets, and Slides by Natural Language with Gemini CLI and MCP&lt;/a&gt;,&amp;rdquo; I showcased a powerful method for dynamically creating API request bodies using natural language. This approach, utilizing the Gemini CLI and a My Custom Proxy (MCP) server, allows users to manage Google Workspace applications with simple, human-readable commands. The core concept is that generating API request bodies directly from natural language within a script can dramatically streamline automation and development.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2025/07/22/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Tue, 22 Jul 2025 10:58:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/22/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v2013&#34;&gt;GeminiWithFiles was updated to v2.0.13&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.13 (July 22, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;responseJsonSchema&lt;/code&gt; was added.&lt;/li&gt;&#xA;&lt;li&gt;The default model was changed from &lt;code&gt;models/gemini-2.5-flash-preview-04-17&lt;/code&gt; to &lt;code&gt;models/gemini-2.5-flash&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/07/19/updated-gas-library-toolsformcpserver/</link>
      <pubDate>Sat, 19 Jul 2025 16:17:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/19/updated-gas-library-toolsformcpserver/</guid>
      <description>&lt;h2 id=&#34;toolsformcpserver-was-updated-to-v107&#34;&gt;ToolsForMCPServer was updated to v1.0.7&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.7 (July 19, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Added a &lt;code&gt;getToolList&lt;/code&gt; method for retrieving all current tools in the library.&lt;/li&gt;&#xA;&lt;li&gt;Tools can be filtered using &lt;code&gt;enables&lt;/code&gt; or &lt;code&gt;disables&lt;/code&gt; as an array argument for the &lt;code&gt;getTools&lt;/code&gt; method. If &lt;code&gt;enables&lt;/code&gt; is used, only the tools specified in the &lt;code&gt;enables&lt;/code&gt; array will be used. If &lt;code&gt;disables&lt;/code&gt; is used, all tools except those specified in the &lt;code&gt;disables&lt;/code&gt; array will be used. If neither &lt;code&gt;enables&lt;/code&gt; nor &lt;code&gt;disables&lt;/code&gt; is used, all tools will be used.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detailed information here &lt;a href=&#34;https://github.com/tanaikech/ToolsForMCPServer&#34;&gt;https://github.com/tanaikech/ToolsForMCPServer&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Google Docs, Sheets, and Slides by Natural Language with Gemini CLI and MCP</title>
      <link>https://tanaikech.github.io/2025/07/17/managing-google-docs-sheets-and-slides-by-natural-language-with-gemini-cli-and-mcp/</link>
      <pubDate>Thu, 17 Jul 2025 15:48:40 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/17/managing-google-docs-sheets-and-slides-by-natural-language-with-gemini-cli-and-mcp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/07058ee7cefeae8e360be01cd99c6ebc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250717a/fig1.jpg&#34;&#xA;     alt=&#34;Managing Google Docs, Sheets, and Slides by Natural Language with Gemini CLI and MCP&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This report explores an optimized approach to integrating the Gemini CLI with Google Workspace via an MCP server. Traditionally, this process requires numerous custom tools, which increases development costs. We propose leveraging the inherent JSON schema requirements of the MCP server tools to directly construct request bodies for the &lt;code&gt;batchUpdate&lt;/code&gt; methods of the Google Docs, Sheets, and Slides APIs. This approach aims to consolidate document management into just three core tools, significantly streamlining development and offering a scalable, cost-effective solution for Google Workspace automation and broader API integrations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Next-Level Data Automation: Gemini CLI, Google Sheets, and MCP</title>
      <link>https://tanaikech.github.io/2025/07/12/next-level-data-automation-gemini-cli-google-sheets-and-mcp/</link>
      <pubDate>Sat, 12 Jul 2025 11:24:44 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/12/next-level-data-automation-gemini-cli-google-sheets-and-mcp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9d5a2ebf69781ac37f9b1338949278de&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250712a/fig1.jpg&#34;&#xA;     alt=&#34;Next-Level Data Automation: Gemini CLI, Google Sheets, and MCP&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article explores the integration of the Gemini Command-Line Interface (CLI) with Google Sheets using the Model Context Protocol (MCP). It demonstrates how to leverage the open-source projects &lt;code&gt;MCPApp&lt;/code&gt; and &lt;code&gt;ToolsForMCPServer&lt;/code&gt; to create a bridge between the Gemini CLI and Google Workspace. This enables users to perform powerful data automation tasks, such as creating, reading, and modifying tables in Google Sheets directly from the command line, using natural language prompts. The article provides practical examples and sample prompts to illustrate the seamless workflow and potential for building sophisticated, AI-powered applications within the Google Cloud ecosystem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini CLI: Featuring an Enhanced ToolsForMCPServer</title>
      <link>https://tanaikech.github.io/2025/07/09/gemini-cli-featuring-an-enhanced-toolsformcpserver/</link>
      <pubDate>Wed, 09 Jul 2025 15:22:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/09/gemini-cli-featuring-an-enhanced-toolsformcpserver/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f56d5c555a46acb6539ac2926b468f62&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250709a/fig1.jpg&#34;&#xA;     alt=&#34;Gemini CLI: Featuring an Enhanced ToolsForMCPServer&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This report introduces &lt;code&gt;ToolsForMCPServer&lt;/code&gt;, an enhanced Google Apps Script library that expands the capabilities of Gemini CLI. It showcases new tools that streamline complex workflows, with a special emphasis on facilitating seamless file content transfer and management between a user&amp;rsquo;s local environment and Google Drive.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This report details significant enhancements to &lt;strong&gt;ToolsForMCPServer&lt;/strong&gt;, a powerful Google Apps Script library designed to work in tandem with Gemini CLI. By integrating this library with a Model Context Protocol (MCP) server, the capabilities of Gemini CLI are dramatically expanded, especially in its interaction with Google Workspace services. This document will explore the core architecture that makes this possible, introduce the new tools available in the library, and demonstrate their power through practical examples that bridge the local command line with the cloud.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Processing File Content Using Gemini CLI with an MCP Server Built by Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/07/08/processing-file-content-using-gemini-cli-with-an-mcp-server-built-by-google-apps-script/</link>
      <pubDate>Tue, 08 Jul 2025 15:17:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/08/processing-file-content-using-gemini-cli-with-an-mcp-server-built-by-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d16449e35d0a5d78299ca8028f414765&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250708a/fig1.jpg&#34;&#xA;     alt=&#34;Processing File Content Using Gemini CLI with an MCP Server Built by Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This report details two methods for processing files using the Gemini CLI and a Google Apps Script MCP server: direct Base64 encoding and indirect transfer via the Google Drive API using &lt;code&gt;ggsrun&lt;/code&gt;. The direct method proved ineffective due to token limits. The recommended approach, leveraging &lt;code&gt;ggsrun&lt;/code&gt;, allows for efficient, scalable file transfers by using file IDs instead of embedding content within the prompt, enabling advanced automation capabilities.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini CLI with MCP Server: Expanding Possibilities with Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/07/03/gemini-cli-with-mcp-server-expanding-possibilities-with-google-apps-script/</link>
      <pubDate>Thu, 03 Jul 2025 15:45:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/07/03/gemini-cli-with-mcp-server-expanding-possibilities-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/39b887f108b4896e34fea58df0695abd&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250703a/fig1.jpg&#34;&#xA;     alt=&#34;Gemini CLI with MCP Server: Expanding Possibilities with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini CLI provides a powerful command-line interface for interacting with Google&amp;rsquo;s Gemini models. By leveraging the Model Context Protocol (MCP), the CLI can be extended with custom tools. This report explores the integration of the Gemini CLI with an MCP server built using Google Apps Script Web Apps. We demonstrate how this combination simplifies authorization for Google Workspace APIs (Gmail, Drive, Calendar, etc.), allowing Gemini to execute complex, multi-step tasks directly within the Google ecosystem. We provide setup instructions and several practical examples showcasing how this integration unlocks significant potential for automation and productivity enhancement.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini CLI with MCP Server Built by Web Apps of Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/06/27/gemini-cli-with-mcp-server-built-by-web-apps-of-google-apps-script/</link>
      <pubDate>Fri, 27 Jun 2025 16:12:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/27/gemini-cli-with-mcp-server-built-by-web-apps-of-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4052c4dd938c845618746be420c5cc9c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini CLI can be integrated with Google Workspace via Google Apps Script to securely access personal data, enabling powerful automations like email summaries and calendar management.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The recently released Gemini CLI is a powerful command-line interface for interacting with Google&amp;rsquo;s Gemini models and cloud resources. &lt;a href=&#34;https://cloud.google.com/blog/ja/topics/developers-practitioners/introducing-gemini-cli&#34;&gt;Ref&lt;/a&gt; While powerful on its own, its utility can be significantly enhanced by connecting it to a user&amp;rsquo;s personal Google resources, such as Google Sheets, Docs, Slides, Gmail, and Calendar.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Practical Analysis of the Gemini API&#39;s URL Context Tool</title>
      <link>https://tanaikech.github.io/2025/06/26/a-practical-analysis-of-the-gemini-apis-url-context-tool/</link>
      <pubDate>Thu, 26 Jun 2025 11:49:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/26/a-practical-analysis-of-the-gemini-apis-url-context-tool/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6cd666838572f478d69ec8ae660968d9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250626a/fig1.jpg&#34;&#xA;     alt=&#34;A Practical Analysis of the Gemini API&amp;#39;s URL Context Tool&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API recently introduced the URL context tool, a feature designed to allow the model to directly fetch and utilize content from specified URLs to ground its responses. &lt;a href=&#34;https://developers.googleblog.com/en/gemini-api-io-updates/&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This report provides a practical demonstration of this tool&amp;rsquo;s capabilities. We will investigate its impact on two critical aspects of AI model interaction: the accuracy of the generated response and the total token consumption, which directly affects API costs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Major Update: Taking Advantage of Web Apps with Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/06/24/major-update-taking-advantage-of-web-apps-with-google-apps-script/</link>
      <pubDate>Tue, 24 Jun 2025 16:26:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/24/major-update-taking-advantage-of-web-apps-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250624a/fig1.jpg&#34;&#xA;     alt=&#34;Major Update: Taking Advantage of Web Apps with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;I am thrilled to announce a significant update to the &lt;a href=&#34;https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script&#34;&gt;Taking Advantage of Web Apps with Google Apps Script&lt;/a&gt; repository! Now at Version 2.0.0, this comprehensive guide has been extensively revised and expanded to provide unparalleled insights and practical guidance for developers leveraging Google Apps Script Web Apps.&lt;/p&gt;&#xA;&lt;p&gt;This major overhaul introduces a wealth of new and enhanced content, designed to empower you with a deeper understanding and more advanced capabilities.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Smart Chips on Google Sheets with Sheets API</title>
      <link>https://tanaikech.github.io/2025/06/20/managing-smart-chips-on-google-sheets-with-sheets-api/</link>
      <pubDate>Fri, 20 Jun 2025 16:56:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/20/managing-smart-chips-on-google-sheets-with-sheets-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/682d77c3e3fb4aade4e816801a26ca21&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250620a/fig1.jpg&#34;&#xA;     alt=&#34;Managing Smart Chips on Google Sheets with Sheets API&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;Google Sheets now supports managing smart chips via its API, enabling retrieval and placement with Apps Script and other languages.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Smart chips in Google Sheets and Docs are a powerful feature designed to enhance collaboration and information sharing. While there historically haven&amp;rsquo;t been built-in Google Apps Script methods to manage these chips, a workaround was previously developed to address this limitation (&lt;a href=&#34;https://medium.com/google-cloud/workaround-smart-chips-with-google-apps-script-292ed1964bb3&#34;&gt;Ref&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Consolidating Generative AI Protocols: A Single Server Solution for MCP and A2A</title>
      <link>https://tanaikech.github.io/2025/06/19/consolidating-generative-ai-protocols-a-single-server-solution-for-mcp-and-a2a/</link>
      <pubDate>Thu, 19 Jun 2025 11:18:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/19/consolidating-generative-ai-protocols-a-single-server-solution-for-mcp-and-a2a/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f6e92df66a3a4f057f9bcae7c9d8a339&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250619a/fig1.jpg&#34;&#xA;     alt=&#34;Consolidating Generative AI Protocols: A Single Server Solution for MCP and A2A&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;A new unified Google Apps Script now deploys both Model Context Protocol (MCP) and Agent2Agent (A2A) networks as a single server, streamlining AI model integration for Google Workspace users.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The rapid growth of generative AI has led to increasing integration between AI models, exemplified by protocols like the Model Context Protocol (MCP) and Agent2Agent (A2A) Protocol. Recently, I released MCPApp and A2AApp, which establish the MCP and A2A networks using Google Apps Script. &lt;a href=&#34;https://medium.com/google-cloud/gmail-processing-using-mcp-network-powered-by-google-apps-script-5ede2a25c94e&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://medium.com/google-cloud/enabling-collaborative-agent-systems-through-google-apps-script-based-agent2agent-a2a-network-19e3d0472eaa&#34;&gt;Ref&lt;/a&gt; This approach offers significant advantages for users of Google Workspace and Google APIs, as it enables seamless authorization and integration of these resources directly within the applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Growing Image Generation with Gemini API: Python and Node.js Now Supported</title>
      <link>https://tanaikech.github.io/2025/06/16/growing-image-generation-with-gemini-api-python-and-node.js-now-supported/</link>
      <pubDate>Mon, 16 Jun 2025 10:33:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/16/growing-image-generation-with-gemini-api-python-and-node.js-now-supported/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d3057587c22228503d313cea74a33e56&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250616a/fig1.jpg&#34;&#xA;     alt=&#34;Growing Image Generation with Gemini API: Python and Node.js Now Supported&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This article announces that the Gemini API&amp;rsquo;s Python client library now supports &amp;ldquo;growing image&amp;rdquo; generation, a feature previously unavailable. Sample scripts for Python and Node.js are provided to demonstrate this new capability.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;I recently published an article, &amp;ldquo;&lt;a href=&#34;https://medium.com/google-cloud/generate-growing-images-using-gemini-api-3de7638e47fd&#34;&gt;Generate Growing Images using Gemini API&lt;/a&gt;,&amp;rdquo; which detailed a method for progressively generating images. At the time of publication, the official Python client library for the Gemini API lacked the necessary functionality to fully implement this feature, preventing Python users from easily replicating the &amp;ldquo;growing image&amp;rdquo; effect.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2025/06/14/updated-gas-library-utlapp/</link>
      <pubDate>Sat, 14 Jun 2025 15:20:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/14/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v1011&#34;&gt;UtlApp was updated to v1.0.11.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.11 (June 14, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The method &lt;a href=&#34;https://github.com/tanaikech/UtlApp?tab=readme-ov-file#getinffromblob&#34;&gt;getInfFromBlob&lt;/a&gt; was added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2025/06/13/updated-gas-library-utlapp/</link>
      <pubDate>Fri, 13 Jun 2025 11:04:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/13/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v1010&#34;&gt;UtlApp was updated to v1.0.10.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.10 (June 13, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The method &lt;a href=&#34;https://github.com/tanaikech/UtlApp?tab=readme-ov-file#getmp3tag&#34;&gt;getMP3Tag&lt;/a&gt; was added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2025/06/13/updated-gas-library-utlapp/</link>
      <pubDate>Fri, 13 Jun 2025 09:53:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/13/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v109&#34;&gt;UtlApp was updated to v1.0.9.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.9 (June 13, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The method &lt;a href=&#34;https://github.com/tanaikech/UtlApp#convertl16towav&#34;&gt;convertL16ToWav&lt;/a&gt; was added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - MCPApp</title>
      <link>https://tanaikech.github.io/2025/06/12/updated-gas-library-mcpapp/</link>
      <pubDate>Thu, 12 Jun 2025 15:36:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/12/updated-gas-library-mcpapp/</guid>
      <description>&lt;h2 id=&#34;mcpapp-was-updated-to-v200&#34;&gt;MCPApp was updated to v2.0.0&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.0 (June 12, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From v2.0.0, both the MCP client and the MCP server can be built by Google Apps Script.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/MCPApp&#34;&gt;https://github.com/tanaikech/MCPApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gmail Processing using MCP Network Powered by Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/06/12/gmail-processing-using-mcp-network-powered-by-google-apps-script/</link>
      <pubDate>Thu, 12 Jun 2025 15:06:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/12/gmail-processing-using-mcp-network-powered-by-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c2b9ef63039510762a1c50a23170b922&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250612a/fig1.jpg&#34;&#xA;     alt=&#34;Gmail Processing using MCP Network Powered by Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report details an MCP network using Google Apps Script for both server and client, enabling automated, secure Gmail processing to boost efficiency.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Recently, I published a report titled &amp;ldquo;Building Model Context Protocol (MCP) Server with Google Apps Script,&amp;rdquo; which you can find &lt;a href=&#34;https://medium.com/google-cloud/building-model-context-protocol-mcp-server-with-google-apps-script-9ff1fe58653c&#34;&gt;here&lt;/a&gt;. In that initial report, I demonstrated the feasibility of creating an MCP server using Google Apps Script, with Claude Desktop serving as the client.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Text-To-Speech (TTS) using Gemini API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/06/11/text-to-speech-tts-using-gemini-api-with-google-apps-script/</link>
      <pubDate>Wed, 11 Jun 2025 16:22:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/11/text-to-speech-tts-using-gemini-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bcdecc89f71d421a2de405d675e722b1&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;This script provides a simple example for generating Text-To-Speech (TTS) using the &lt;strong&gt;Gemini API&lt;/strong&gt; within &lt;strong&gt;Google Apps Script&lt;/strong&gt;. The Gemini API generates audio data in the &lt;code&gt;audio/L16;codec=pcm;rate=24000&lt;/code&gt; format, which is not directly playable. Since there&amp;rsquo;s no built-in method to convert this to a standard &lt;code&gt;audio/wav&lt;/code&gt; format, this sample script includes a custom function to handle the conversion.&lt;/p&gt;&#xA;&lt;h2 id=&#34;limitations-and-considerations&#34;&gt;Limitations and Considerations&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The provided &lt;code&gt;convertL16ToWav_&lt;/code&gt; function is specifically designed for the &lt;code&gt;audio/L16;codec=pcm;rate=24000&lt;/code&gt; MIME type. Using it with other audio formats will result in an error.&lt;/li&gt;&#xA;&lt;li&gt;The script uses a hardcoded WAV header. This header assumes specific audio parameters (e.g., sample rate, bit depth, number of channels) that match the Gemini API&amp;rsquo;s output for this format. If the Gemini API&amp;rsquo;s output format changes, this header might need adjustment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample Script&lt;/h2&gt;&#xA;&lt;p&gt;Before running, replace &lt;code&gt;&amp;quot;###&amp;quot;&lt;/code&gt; with your actual &lt;strong&gt;Gemini API key&lt;/strong&gt; in the &lt;code&gt;myFunction&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Importance of Time Information in Gemini and Current Time Handling</title>
      <link>https://tanaikech.github.io/2025/06/06/importance-of-time-information-in-gemini-and-current-time-handling/</link>
      <pubDate>Fri, 06 Jun 2025 15:00:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/06/importance-of-time-information-in-gemini-and-current-time-handling/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e5114194e059153de2b0511ca18ba4bd&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250606a/fig1.jpg&#34;&#xA;     alt=&#34;Importance of Time Information in Gemini and Current Time Handling&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report investigates how Gemini handles current time information, particularly when using the Gemini API. We found that while the Gemini web interface knows the current time, the Gemini API does not inherently. Therefore, applications must explicitly provide current time information in API calls for accurate time-sensitive responses.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The rapidly advancing field of generative AI is enabling increasingly complex tasks, particularly through the use of open protocols like the Model Context Protocol (MCP) and Agent2Agent (A2A) Protocol. These protocols facilitate sophisticated operations that often require accurate and dynamic information, including time-sensitive data. For instance, applications that manage schedules or coordinate events critically depend on precise time information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating Straight to Smart Quote Conversion in Google Docs</title>
      <link>https://tanaikech.github.io/2025/06/05/automating-straight-to-smart-quote-conversion-in-google-docs/</link>
      <pubDate>Thu, 05 Jun 2025 10:54:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/06/05/automating-straight-to-smart-quote-conversion-in-google-docs/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/80a69b4a5bbd0420c525681088dc30bf&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250605a/fig1.png&#34;&#xA;     alt=&#34;Automating Straight to Smart Quote Conversion in Google Docs&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;For extensive Google Docs, manually converting straight to smart quotes is inefficient. This report offers an automated solution using Google Apps Script, saving time and effort.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;You might find yourself needing to convert straight quotes (both single and double) to smart quotes in Google Docs. For small documents with a limited number of quotes, this can be done manually with minimal effort. However, when dealing with extensive documents and numerous quotes, the manual process becomes time-consuming and inefficient. This report presents a solution to automate this conversion using Google Apps Script, significantly reducing the processing cost for larger projects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - MCPApp</title>
      <link>https://tanaikech.github.io/2025/05/29/updated-gas-library-mcpapp/</link>
      <pubDate>Thu, 29 May 2025 14:20:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/29/updated-gas-library-mcpapp/</guid>
      <description>&lt;h2 id=&#34;mcpapp-was-updated-to-v102&#34;&gt;MCPApp was updated to v1.0.2&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (May 29, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From v1.0.2, in order to use MCPApp as a library, LockService is given.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/MCPApp&#34;&gt;https://github.com/tanaikech/MCPApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - A2AApp</title>
      <link>https://tanaikech.github.io/2025/05/29/updated-gas-library-a2aapp/</link>
      <pubDate>Thu, 29 May 2025 11:07:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/29/updated-gas-library-a2aapp/</guid>
      <description>&lt;h2 id=&#34;a2aapp-was-updated-to-v201&#34;&gt;A2AApp was updated to v2.0.1&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.1 (May 29, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From v2.0.1, A2AApp can also be used as a library. &lt;a href=&#34;https://github.com/tanaikech/A2AApp/tree/master/Use_A2AApp_as_library&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/A2AApp&#34;&gt;https://github.com/tanaikech/A2AApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enabling Collaborative Agent Systems through Google Apps Script-based Agent2Agent (A2A) Network</title>
      <link>https://tanaikech.github.io/2025/05/28/enabling-collaborative-agent-systems-through-google-apps-script-based-agent2agent-a2a-network/</link>
      <pubDate>Wed, 28 May 2025 09:49:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/28/enabling-collaborative-agent-systems-through-google-apps-script-based-agent2agent-a2a-network/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0dcee0009d8037262b60c8723283e9a5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250528a/fig1.jpg&#34;&#xA;     alt=&#34;Enabling Collaborative Agent Systems through Google Apps Script-based Agent2Agent (A2A) Network&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report details the Agent2Agent (A2A) network built with Google Apps Script&amp;rsquo;s Web Apps. It facilitates communication between diverse AI agents, overcoming platform limitations. Key improvements include parallel task execution with asynchronous processes and enhanced security through secure access token handling and user-specific Web App availability, demonstrating a robust and secure A2A implementation.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;This report details an updated implementation of &lt;strong&gt;Agent2Agent (A2A)&lt;/strong&gt;, an open protocol designed to enable communication and collaboration between diverse AI agents. The goal of A2A is to overcome limitations of isolated platforms, allowing AI agents to work together on complex tasks while maintaining their internal structures. I recently published a report titled &amp;ldquo;Building Agent2Agent (A2A) Server with Google Apps Script&amp;rdquo;. &lt;a href=&#34;https://medium.com/google-cloud/building-agent2agent-a2a-server-with-google-apps-script-d3efd32c7ca7&#34;&gt;Ref&lt;/a&gt; This updated report focuses on successfully creating an &lt;strong&gt;A2A network&lt;/strong&gt; using &lt;strong&gt;Google Apps Script&amp;rsquo;s Web Apps functionality&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2025/05/21/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Wed, 21 May 2025 09:49:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/21/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v2010&#34;&gt;GeminiWithFiles was updated to v2.0.10&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.10 (May 21, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Implemented the parallel function calling. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles?tab=readme-ov-file#parallelfunctioncalling&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Agent2Agent (A2A) Server with Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/05/16/building-agent2agent-a2a-server-with-google-apps-script/</link>
      <pubDate>Fri, 16 May 2025 15:16:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/16/building-agent2agent-a2a-server-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/85c4762a8b8c6c7d8bee1d7ed32ade34&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250516a/fig1.jpg&#34;&#xA;     alt=&#34;Building Agent2Agent (A2A) Server with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Exploring Agent2Agent (A2A) protocol implementation in Google Apps Script seamlessly allows AI agents to access Google Workspace data and functions. This could enable complex workflows and automation, overcoming platform silos for integrated AI applications.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Agent2Agent (A2A) is a proposed open protocol facilitating communication and collaboration among diverse AI agents, aiming to overcome platform silos and enable complex tasks while preserving agent opacity. This report examines the feasibility of implementing a core A2A server component using Google Apps Script within Google Workspace. Such an implementation could seamlessly allow AI agents to securely access and utilize data and functionalities across Google services like Docs, Sheets, and Gmail via a standardized protocol. This would enable sophisticated AI-powered workflows and automation directly linked to user data. A sample script demonstrates the technical potential despite the current lack of a dedicated Apps Script SDK for A2A. While acknowledging potential Apps Script limitations, such as execution time, this exploratory approach remains valuable for developing internal or user-centric AI applications and integrations within Google Workspace. A successful demonstration could potentially highlight the capabilities of Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Tables on Google Sheets using Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/05/12/managing-tables-on-google-sheets-using-google-apps-script/</link>
      <pubDate>Mon, 12 May 2025 15:51:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/12/managing-tables-on-google-sheets-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fe567e1f397dc4a8d88212f91e779dbd&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250512a/fig1.png&#34;&#xA;     alt=&#34;Managing Tables on Google Sheets using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Google Sheets API now supports programmatic table management (create, delete, modify) as of April 29, 2025. This eliminates previous workarounds and enables direct control, including with Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Sheets tables can now be managed programmatically via the Sheets API, a significant update officially released on April 29, 2025. &lt;a href=&#34;https://developers.google.com/workspace/sheets/docs/release-notes#April_29_2025&#34;&gt;Ref&lt;/a&gt; I learned about this important development from Martin Hawksey&amp;rsquo;s Apps Script Pulse newsletter. &lt;a href=&#34;https://pulse.appsscript.info/p/2025/05/simplify-google-sheets-table-management-with-new-api-support/&#34;&gt;Ref&lt;/a&gt; I am very grateful to Martin for bringing this to light. This update introduces the ability to programmatically manage tables directly through the Sheets API, enabling operations such as creating, deleting, and modifying tables and their properties. Previously, programmatic interaction with Sheets tables was limited and often required using workarounds for even simple management tasks, as explored in my earlier reports &lt;a href=&#34;https://medium.com/google-cloud/workaround-using-google-sheets-tables-with-google-apps-script-7558bcb1b675&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://medium.com/google-cloud/exporting-google-sheets-tables-as-pdfs-using-google-apps-script-bdbdaacc9b8d&#34;&gt;Ref&lt;/a&gt;. With this official API support, more robust and direct control is now possible. In this report, I will introduce how to manage tables on Google Sheets using the Sheets API, with examples implemented using Google Apps Script. It is worth noting, of course, that the Sheets API can also be used with other programming languages besides Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Image Transfer: MCP Server (Web Apps/Google Apps Script) to MCP Client (Gemini/Python)</title>
      <link>https://tanaikech.github.io/2025/05/10/image-transfer-mcp-server-web-apps/google-apps-script-to-mcp-client-gemini/python/</link>
      <pubDate>Sat, 10 May 2025 14:06:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/10/image-transfer-mcp-server-web-apps/google-apps-script-to-mcp-client-gemini/python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8dc35b2e331ec99b0bdbc74b73eab821&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report details transferring image data via Model Context Protocol (MCP) from Google Apps Script server to a Python/Gemini client, extending capabilities for multimodal applications beyond text.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Following up on my previous report, &amp;ldquo;Building Model Context Protocol (MCP) Server with Google Apps Script&amp;rdquo; (&lt;a href=&#34;https://medium.com/google-cloud/building-model-context-protocol-mcp-server-with-google-apps-script-9ff1fe58653c&#34;&gt;Ref&lt;/a&gt;), which detailed the transfer of text data between the MCP server and client, this new report focuses on extending the protocol to handle image data. It introduces a practical method for transferring image data efficiently from the Google Apps Script-based MCP server to an MCP client. In this implementation, the MCP client was built using Python and integrated with the Gemini model, allowing for the processing and utilization of the transferred image data alongside text, thereby enabling more complex, multimodal applications within the MCP framework.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Model Context Protocol (MCP) Server with Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/05/08/building-model-context-protocol-mcp-server-with-google-apps-script/</link>
      <pubDate>Thu, 08 May 2025 15:29:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/08/building-model-context-protocol-mcp-server-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dc74ef2035391bb82d1c1d51ef489e74&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250508a/fig1.jpg&#34;&#xA;     alt=&#34;Building Model Context Protocol (MCP) Server with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This text introduces the Model Context Protocol (MCP) for standardizing AI interaction with external systems. It explores the potential of using Google Apps Script (GAS) to host an MCP server, leveraging GAS&amp;rsquo;s integration with Google Workspace for data access. A sample script demonstrates feasibility, highlighting the current absence of an official GAS SDK. The work aims to foster understanding and encourage SDK development.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Analyzing Google Apps Script from Stackoverflow</title>
      <link>https://tanaikech.github.io/2025/05/01/analyzing-google-apps-script-from-stackoverflow/</link>
      <pubDate>Thu, 01 May 2025 14:48:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/01/analyzing-google-apps-script-from-stackoverflow/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dc6bf3578bed965aaf3bf62abe81e822&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250501b/fig1.jpg&#34;&#xA;     alt=&#34;Analyzing Google Apps Script from Stackoverflow&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The report details a novel Gemini API method to analyze big data beyond AI context window limits, which was validated with Stack Overflow data for insights into Google Apps Script&amp;rsquo;s potential.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Generative AI models face significant limitations when processing massive datasets, primarily due to the constraints imposed by their fixed context windows. Current methods thus struggle to analyze the entirety of big data within a single API call, preventing comprehensive analysis. To address this challenge, I have developed and published a detailed report presenting a novel approach using the Gemini API for comprehensive big data analysis, designed to operate effectively beyond typical model context window limits. &lt;a href=&#34;https://github.com/tanaikech/analyze_big_data_by_Gemini&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comprehensive Big Data Processing with Gemini</title>
      <link>https://tanaikech.github.io/2025/05/01/comprehensive-big-data-processing-with-gemini/</link>
      <pubDate>Thu, 01 May 2025 14:12:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/05/01/comprehensive-big-data-processing-with-gemini/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/92e16484ddfd8e8966673fdf92165ff9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250501a/fig1.jpg&#34;&#xA;     alt=&#34;Comprehensive Big Data Processing with Gemini&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Generative AI faces limits in processing massive datasets due to context windows. Current methods can&amp;rsquo;t analyze entire data lakes. This report presents a Gemini API approach for comprehensive big data analysis beyond typical model limits.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The rapid advancement and widespread adoption of generative AI have been remarkable. High expectations are placed on these technologies, particularly regarding processing speed and the capacity to handle vast amounts of data. While AI processing speed continues to increase with technological progress, effectively managing and analyzing truly large datasets presents significant challenges. The current practical limits on the amount of data that can be processed or held within a model&amp;rsquo;s context window simultaneously, sometimes around a million tokens or less, depending on the model and task, restrict direct comprehensive analysis of massive data lakes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2025/04/23/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Wed, 23 Apr 2025 15:30:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/04/23/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v206&#34;&gt;GeminiWithFiles was updated to v2.0.6&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.6 (April 23, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A new method &lt;code&gt;countTokens&lt;/code&gt; was added. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles?tab=readme-ov-file#counttokens&#34;&gt;Ref&lt;/a&gt; When this method is used, you can count tokens of the request.&lt;/li&gt;&#xA;&lt;li&gt;This pull request was reflected. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles/pull/6&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrating Gemini and Google Apps Script for Automated Google Slides Presentations</title>
      <link>https://tanaikech.github.io/2025/04/15/integrating-gemini-and-google-apps-script-for-automated-google-slides-presentations/</link>
      <pubDate>Tue, 15 Apr 2025 13:39:44 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/04/15/integrating-gemini-and-google-apps-script-for-automated-google-slides-presentations/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/063bbecb2d3beaddc17fc3bf59722f13&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Learn how Gemini AI and Google Apps Script automate Google Slides generation. A developed application demonstrates this synergy, streamlining initial presentation drafting and showcasing AI&amp;rsquo;s automation potential within Google Workspace.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The field of AI, particularly large language models like Google&amp;rsquo;s Gemini, is advancing rapidly. A powerful application of this technology involves integrating Gemini with Google Apps Script. Google Apps Script provides a seamless way to automate tasks across Google Workspace by natively handling authorization and interaction with services like Google Docs, Google Sheets, and Google Slides. By combining Gemini&amp;rsquo;s generative capabilities with Apps Script, sophisticated automations become accessible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stowage Planning Automation Using Gemini: A Feasibility Study and A Prompt-Based Approach</title>
      <link>https://tanaikech.github.io/2025/04/03/stowage-planning-automation-using-gemini-a-feasibility-study-and-a-prompt-based-approach/</link>
      <pubDate>Thu, 03 Apr 2025 11:14:40 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/04/03/stowage-planning-automation-using-gemini-a-feasibility-study-and-a-prompt-based-approach/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9ef17c48c485891e7b873408c7fec82a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250403a/fig1.jpg&#34;&#xA;     alt=&#34;Stowage Planning Automation Using Gemini: A Feasibility Study and A Prompt-Based Approach&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Gemini 2.5 Pro Experimental enabled automated cargo ship stowage planning via prompt engineering, overcoming prior model limitations. This eliminates the need for complex algorithms, demonstrating AI&amp;rsquo;s potential in logistics.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Recently, I encountered a practical business challenge: automating stowage planning through AI. Specifically, I received a request to generate optimal container loading plans for cargo ships, a task traditionally requiring significant manual effort and domain expertise. In initial tests, prior to the release of Gemini 2.5, I found that existing models struggled to effectively handle the complexities of this problem, including constraints like weight distribution, container dimensions, and destination sequencing. However, with the release of Gemini 2.5, I observed a significant improvement in the model&amp;rsquo;s capabilities. Utilizing the Gemini 2.5 Pro Experimental model, I successfully demonstrated the generation of viable stowage plans using only carefully crafted prompts. This breakthrough eliminates the need for complex, custom-built algorithms or extensive training datasets. The successful implementation involved providing the model with key parameters such as container dimensions, weights, destination ports, and ship capacity. This report details the methodology, prompt engineering, and results of my attempt to create automated stowage planning using Gemini 2.5 Pro Experimental, highlighting its potential to revolutionize logistics and shipping operations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Roadmap Generator as Gemini</title>
      <link>https://tanaikech.github.io/2025/04/01/roadmap-generator-as-gemini/</link>
      <pubDate>Tue, 01 Apr 2025 16:32:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/04/01/roadmap-generator-as-gemini/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/723c153d0e7ccb415d68fb4f42a326b1&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250401a/fig1.jpg&#34;&#xA;     alt=&#34;Roadmap Generator as Gemini&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Gemini and Google Apps Script automate project roadmap creation in Google Sheets, including Gantt charts, improving efficiency and agile planning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;When initiating a new project, a comprehensive roadmap is crucial for successful execution. Previously, I meticulously crafted these roadmaps manually, a time-consuming process. However, leveraging the advanced capabilities of Google&amp;rsquo;s Gemini, I&amp;rsquo;ve significantly streamlined this workflow. Gemini now assists in generating detailed project roadmaps, enhancing efficiency and accuracy. To further automate this process, I developed a Google Apps Script that dynamically constructs these roadmaps directly within Google Sheets, complete with integrated Gantt charts. This script facilitates the rapid generation of diverse project roadmaps, enabling agile planning and adaptation for future endeavors. This report details the functionality and implementation of this script, demonstrating its potential to optimize project planning and visualization.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enhanced Text Manipulation in Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/03/25/enhanced-text-manipulation-in-google-slides-using-google-apps-script/</link>
      <pubDate>Tue, 25 Mar 2025 14:20:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/25/enhanced-text-manipulation-in-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c7f8adb32d595b9e27b6a43f0910569e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250325a/fig1.jpg&#34;&#xA;     alt=&#34;Enhanced Text Manipulation in Google Slides using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;This is a sample Google Apps Script designed to replace all instances of specific text within a Google Slides presentation, while simultaneously applying a desired text style. The built-in &lt;code&gt;Presentation.replaceAllText()&lt;/code&gt; method within the Google Slides service is limited; it efficiently replaces text strings but lacks the functionality to modify text formatting during the replacement process. This limitation poses a challenge when aiming for styled text replacements. This report presents a detailed script solution that overcomes this constraint. The script iterates through all text elements within the slides, identifies matching text, and performs a replacement. Crucially, it also applies specified text formatting attributes, such as font, font size, color, and bold/italic settings, to the replaced text. This enhanced functionality allows users to maintain consistent and visually appealing presentations when automating text modifications. Furthermore, the script illustrates the use of &lt;code&gt;TextRange&lt;/code&gt; methods for precise text manipulation and styling within Google Slides. This approach offers a more robust alternative to the standard &lt;code&gt;replaceAllText()&lt;/code&gt; method, providing greater control over text replacement and formatting in Google Slides automation workflows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slide Puzzle in Google Sheets</title>
      <link>https://tanaikech.github.io/2025/03/21/slide-puzzle-in-google-sheets/</link>
      <pubDate>Fri, 21 Mar 2025 15:52:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/21/slide-puzzle-in-google-sheets/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d9a76ea9fad4eb49fcd5b02c677ac293&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250321a/fig1.gif&#34;&#xA;     alt=&#34;Slide Puzzle in Google Sheets&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report demonstrates the &lt;code&gt;onSelectionChange&lt;/code&gt; simple trigger in Google Sheets by creating a slide puzzle. Selecting cells triggers script execution, enabling interactive gameplay.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;At Google Sheets, simple triggers can be used. When simple triggers are used, users can automatically run Google Apps Script based on actions in the spreadsheet. Among the simple triggers is &lt;code&gt;onSelectionChange&lt;/code&gt;. This can automatically run a script when a cell is selected. In this report, as a simple sample script demonstrating the use of &lt;code&gt;onSelectionChange&lt;/code&gt;, I created a slide puzzle in Google Sheets. The goal of the slide puzzle is to align the numbers by sliding them. Here, &lt;code&gt;onSelectionChange&lt;/code&gt; is used to detect the selected number and slide it. The aim of this report is to learn about the simple trigger &lt;code&gt;onSelectionChange&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generate Growing Images using Gemini API</title>
      <link>https://tanaikech.github.io/2025/03/19/generate-growing-images-using-gemini-api/</link>
      <pubDate>Wed, 19 Mar 2025 13:42:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/19/generate-growing-images-using-gemini-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/369c2ea717c27dbde04a2ad13133535a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250319a/fig1.jpg&#34;&#xA;     alt=&#34;Generate Growing Images using Gemini API&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Gemini API now generates images via Flash Experimental and Imagen 3. This report introduces image evolution within conversations using Gemini API with Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Recently, image generation was supported in the Gemini API using Gemini 2.0 Flash Experimental and Imagen 3. I have already reported a simple sample script for generating images using the Gemini API with Google Apps Script. &lt;a href=&#34;https://medium.com/google-cloud/generate-images-with-gemini-api-using-google-apps-script-a7c04c0a4843&#34;&gt;Ref&lt;/a&gt; In practice, you might want to evolve the generated images within a conversation. In this report, I would like to introduce a sample script demonstrating this using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2025/03/19/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Wed, 19 Mar 2025 13:11:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/19/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v205&#34;&gt;GeminiWithFiles was updated to v2.0.5&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.5 (March 19, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A new method &lt;code&gt;chat&lt;/code&gt; was added. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles?tab=readme-ov-file#chat&#34;&gt;Ref&lt;/a&gt; When this method is used, you can generate content with Gemini API through the chat.&lt;/li&gt;&#xA;&lt;li&gt;The default model was changed from &lt;code&gt;models/gemini-1.5-flash-latest&lt;/code&gt; to &lt;code&gt;models/gemini-2.0-flash&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create Visualized Recipe Instructions with Gemini using Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/03/17/create-visualized-recipe-instructions-with-gemini-using-google-apps-script/</link>
      <pubDate>Mon, 17 Mar 2025 14:42:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/17/create-visualized-recipe-instructions-with-gemini-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ec9ec5946a0f28f715b6824f69790cf5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250317a/fig1.png&#34;&#xA;     alt=&#34;Create Visualized Recipe Instructions with Gemini using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report presents a Google Apps Script for generating visualized cooking recipes with text and images using the Gemini API, leveraging its image generation capabilities.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Recently, image generation was supported in the Gemini API using Gemini 2.0 Flash Experimental and Imagen 3. I have already reported a simple sample script for generating images using the Gemini API with Google Apps Script. &lt;a href=&#34;https://medium.com/google-cloud/generate-images-with-gemini-api-using-google-apps-script-a7c04c0a4843&#34;&gt;Ref&lt;/a&gt; Google Apps Script seamlessly integrates with Google Docs, Sheets, and Slides. In this report, I would like to introduce a script for creating a recipe for cooking a dish, including texts and images, using the Gemini API with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generate Images with Gemini API using Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/03/15/generate-images-with-gemini-api-using-google-apps-script/</link>
      <pubDate>Sat, 15 Mar 2025 15:32:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/15/generate-images-with-gemini-api-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6cfeded96e440a9f722a23bed4992948&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250315b/fig1.png&#34;&#xA;     alt=&#34;Generate Images with Gemini API using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Recently, image generation was supported in the Gemini API using Gemini 2.0 Flash Experimental and Imagen 3. This report introduces simple sample scripts for generating images using the Gemini API with Google Apps Script. When images can be created using the Gemini API with Google Apps Script, Google Apps Script, which seamlessly integrates with Google Docs, Sheets, and Slides, becomes a powerful tool for creating and managing them, and the applications are infinite.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2025/03/15/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Sat, 15 Mar 2025 14:56:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/15/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v204&#34;&gt;GeminiWithFiles was updated to v2.0.4&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.4 (March 15, 2025)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Property &lt;code&gt;generationConfig&lt;/code&gt; was added to the method &lt;code&gt;geminiWithFiles&lt;/code&gt;. By this, you can use all properties for &lt;code&gt;generationConfig&lt;/code&gt;. &lt;a href=&#34;https://ai.google.dev/api/generate-content#v1beta.GenerationConfig&#34;&gt;Ref&lt;/a&gt; You can see the sample scripts at &amp;ldquo;&lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles#usegooglesearch&#34;&gt;Use googleSearch for grounding&lt;/a&gt;&amp;rdquo; and &amp;ldquo;&lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles#generateimage&#34;&gt;Generate image&lt;/a&gt;&amp;rdquo;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Smart Chips with Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/03/15/workaround-smart-chips-with-google-apps-script/</link>
      <pubDate>Sat, 15 Mar 2025 13:48:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/15/workaround-smart-chips-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d41f696a9931e5c931bff4eb5627f854&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Now, Google Docs and Google Sheets can insert smart chips. Smart chips are very useful for easily inserting information like users, maps, files, and so on. However, unfortunately, at the current stage, smart chips cannot be directly managed using Google Apps Script. Specifically, the information within smart chips cannot be directly retrieved by Google Apps Script. Although I believe this will be resolved in a future update, there might be cases where you want to retrieve information from smart chips using Google Apps Script. This report introduces a workaround for achieving this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Tree Structure from Headings in Google Documents using Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/03/12/creating-tree-structure-from-headings-in-google-documents-using-google-apps-script/</link>
      <pubDate>Wed, 12 Mar 2025 14:13:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/12/creating-tree-structure-from-headings-in-google-documents-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0779fec840d06cbc545d07cb0209bd3d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;This is a Google Apps Script for creating the tree structure from headings in Google Documents.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250312a/fig1.png&#34;&#xA;     alt=&#34;Creating Tree Structure from Headings in Google Documents using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;In order to test this script, please do the following steps.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-sample-document&#34;&gt;1. Sample Document&lt;/h3&gt;&#xA;&lt;p&gt;Create a sample Document as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250312a/fig2.png&#34;&#xA;     alt=&#34;Creating Tree Structure from Headings in Google Documents using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-sample-script&#34;&gt;2. Sample script&lt;/h3&gt;&#xA;&lt;p&gt;Open the script editor and copy and paste the following script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technique for Changing Glyph Colors of Bullets in Google Documents Using Google Apps Script</title>
      <link>https://tanaikech.github.io/2025/03/10/technique-for-changing-glyph-colors-of-bullets-in-google-documents-using-google-apps-script/</link>
      <pubDate>Mon, 10 Mar 2025 14:16:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/10/technique-for-changing-glyph-colors-of-bullets-in-google-documents-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/37f64e848cb8bafa4beb639bca6e0a41&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20250310a/fig1.png&#34;&#xA;     alt=&#34;Technique for Changing Glyph Colors of Bullets in Google Documents Using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;This report introduces a sample script for changing the glyph colors of bullets in lists on Google Documents using Google Apps Script. Currently, there are no built-in methods for achieving this using either the Document service (DocumentApp) or the Docs API. However, this can be accomplished through a specific process. This report will introduce that process using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trend of google-apps-script Tag on Stackoverflow 2025</title>
      <link>https://tanaikech.github.io/2025/03/09/trend-of-google-apps-script-tag-on-stackoverflow-2025/</link>
      <pubDate>Sun, 09 Mar 2025 16:01:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/09/trend-of-google-apps-script-tag-on-stackoverflow-2025/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/141bbe4e2ea4ad8ac926410063d10e1e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Published: March 9, 2025&lt;/p&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;On Stack Overflow, numerous users post questions and answers daily across various tags. These discussions, spanning a wide range of topics, provide valuable information and are highly beneficial. One such tag is &amp;ldquo;google-apps-script,&amp;rdquo; where I occasionally participate in discussions. Observing these threads over time, it&amp;rsquo;s evident that they evolve alongside updates to Google Apps Script, the technology at the core of the tag. This report aims to analyze this evolution as a trend within the &amp;ldquo;google-apps-script&amp;rdquo; tag. This trend encompasses changes in the number of questions, questioners, answerers, and associated tags. The evolution of the &amp;ldquo;google-apps-script&amp;rdquo; tag is closely linked to the development of Google Apps Script and its diverse applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Statistics of my Activities from 2024-01-01 - 2024-12-31 on Stackoverflow</title>
      <link>https://tanaikech.github.io/2025/03/02/statistics-of-my-activities-from-2024-01-01-2024-12-31-on-stackoverflow/</link>
      <pubDate>Sun, 02 Mar 2025 13:55:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2025/03/02/statistics-of-my-activities-from-2024-01-01-2024-12-31-on-stackoverflow/</guid>
      <description>&lt;p&gt;URL: &lt;a href=&#34;https://stackoverflow.com/users/7108653/tanaike?tab=answers&amp;amp;sort=newest&#34;&gt;https://stackoverflow.com/users/7108653/tanaike?tab=answers&amp;amp;sort=newest&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the statistics of my activities from 2024-01-01 - 2024-12-31 on Stackoverflow.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Answers to stackoverflow&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I answered 380 answers.&lt;/li&gt;&#xA;&lt;li&gt;On March 02, 2025, the total view count is 182,695.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Answers to ja.stackoverflow&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I answered 2 answers.&lt;/li&gt;&#xA;&lt;li&gt;On March 02, 2025, the total view count is 3,409.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Total view counts: 186,104&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Export web-published Google Docs as PDFs using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/12/12/workaround-export-web-published-google-docs-as-pdfs-using-google-apps-script/</link>
      <pubDate>Thu, 12 Dec 2024 12:04:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/12/12/workaround-export-web-published-google-docs-as-pdfs-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2f91c211cc6332c84db7b4697ccc4cb6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report outlines a Google Apps Script solution for directly exporting web-published Google Docs to PDF. By circumventing limitations in published URLs, the script enables convenient PDF generation without manual intervention.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Sheets and Google Docs offer the convenient feature of web publishing, providing readily accessible URLs for sharing. &lt;a href=&#34;https://support.google.com/docs/answer/183965?hl=en&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Google Sheets:&lt;/strong&gt; &lt;code&gt;https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Google Docs:&lt;/strong&gt; &lt;code&gt;https://docs.google.com/document/d/e/2PACX-###/pub&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These URLs utilize a unique ID (&lt;code&gt;###&lt;/code&gt;) for each document. While Google Sheets supports direct PDF export by modifying the URL to &lt;code&gt;https://docs.google.com/spreadsheets/d/e/2PACX-###/pub?output=pdf&lt;/code&gt;, a similar direct method for Google Docs is currently unavailable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Streamlining Gmail Processing Including Attachment Files Using Gemini with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/12/05/streamlining-gmail-processing-including-attachment-files-using-gemini-with-google-apps-script/</link>
      <pubDate>Thu, 05 Dec 2024 10:14:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/12/05/streamlining-gmail-processing-including-attachment-files-using-gemini-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f2161b110257e282b71ce1e6d0082a51&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20241205a/fig1.jpg&#34;&#xA;     alt=&#34;Streamlining Gmail Processing Including Attachment Files Using Gemini with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;A new library, MimeTypeApp, simplifies using Gmail messages and attachments with the Gemini API for tasks like text analysis. It converts unsupported formats for seamless integration with Google Apps Script and Gemini.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Recently, I published MimeTypeApp, a Google Apps Script library that simplifies parsing Gmail messages, including attachments, for use with the Gemini API. &lt;a href=&#34;https://github.com/tanaikech/MimeTypeApp&#34;&gt;Ref&lt;/a&gt; This library addresses a key challenge: Gmail attachments come in various MIME types, while the Gemini API currently only accepts a limited set for processing. MimeTypeApp bridges this gap by providing functions to convert unsupported MIME types to formats compatible with Gemini. With MimeTypeApp, you can streamline your workflows that involve parsing Gmail messages and their attachments for tasks like text extraction, summarization, or sentiment analysis using the Gemini API. This report introduces a sample script that demonstrates how to leverage MimeTypeApp to achieve this functionality. By leveraging Google Apps Script&amp;rsquo;s integration capabilities, MimeTypeApp allows you to create powerful applications that seamlessly connect Gmail, Spreadsheets (for storing results or extracted data), and the Gemini API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MimeTypeApp: Flexible MimeType Converter with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/12/04/mimetypeapp-flexible-mimetype-converter-with-google-apps-script/</link>
      <pubDate>Wed, 04 Dec 2024 14:43:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/12/04/mimetypeapp-flexible-mimetype-converter-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9742675d8f2e971e4c6b7fe1d34b254a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20241204a/fig1.png&#34;&#xA;     alt=&#34;MimeTypeApp: Flexible MimeType Converter with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for converting files from various MIME types to a specified target MIME type. The library accepts both file IDs and blobs as input values.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Recently, I encountered a scenario where I needed to convert files of various MIME types to a specific target MIME type. While converting files with known source MIME types is relatively straightforward, the process becomes more complex when the source MIME type is unknown. To simplify this task, I developed a Google Apps Script solution that can effectively convert files of diverse MIME types to a desired target MIME type. The script can accept both file IDs and blobs as input values.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/11/19/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Tue, 19 Nov 2024 21:05:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/11/19/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v203&#34;&gt;GeminiWithFiles was updated to v2.0.3&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.3 (November 19, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I modified the specification of &lt;code&gt;setFileIdsOrUrlsWithResumableUpload&lt;/code&gt;. From v2.0.3, when you use this method, please include &lt;code&gt;propertiesService: PropertiesService.getScriptProperties()&lt;/code&gt; into the initial object as follows. Because, when &lt;code&gt;PropertiesService.getScriptProperties()&lt;/code&gt; is used in the library, the values are put into the library. When I created &lt;a href=&#34;https://github.com/tanaikech/UploadApp&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://medium.com/google-cloud/uploading-large-files-to-gemini-with-google-apps-script-overcoming-50-mb-limit-6ea63204ee81&#34;&gt;Ref&lt;/a&gt;, I supposed that the script is used by copying and pasting instead of the library. So, I included &lt;code&gt;PropertiesService.getScriptProperties()&lt;/code&gt; in the script. But I noticed that when this is used with GeminiWithFiles, each user is required to use &lt;code&gt;PropertiesService.getScriptProperties()&lt;/code&gt;. So, I modified this.&lt;/li&gt;&#xA;&lt;li&gt;As an additional option, when you want to upload the data with the resumable upload as a new upload, please set &lt;code&gt;resumableUploadAsNewUpload: true&lt;/code&gt;. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles?tab=readme-ov-file#setfileidsorurlswithresumableupload&#34;&gt;Ref&lt;/a&gt; By this, the property is cleared and the upload is run.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exporting Google Sheets Tables as PDFs using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/11/06/exporting-google-sheets-tables-as-pdfs-using-google-apps-script/</link>
      <pubDate>Wed, 06 Nov 2024 09:17:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/11/06/exporting-google-sheets-tables-as-pdfs-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/599f47550bd694a7264e24cea795b9bc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20241106a/fig1.png&#34;&#xA;     alt=&#34;Exporting Google Sheets Tables as PDFs using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Recently, I reported on a workaround for effectively working with Google Sheets tables using Google Apps Script: &lt;a href=&#34;https://medium.com/google-cloud/workaround-using-google-sheets-tables-with-google-apps-script-7558bcb1b675&#34;&gt;Ref&lt;/a&gt;. This approach addressed limitations in directly retrieving table data and ranges within Apps Script. In this follow-up report, I&amp;rsquo;m excited to provide a sample script that leverages this workaround to export your valuable Google Sheets tables directly as PDF files. This functionality empowers you to easily share and distribute your data in a clear and universally accessible format.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Using Google Sheets Tables with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/11/02/workaround-using-google-sheets-tables-with-google-apps-script/</link>
      <pubDate>Sat, 02 Nov 2024 10:11:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/11/02/workaround-using-google-sheets-tables-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2e6b1fa2d8f16464dffba070376c458d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20241102a/fig1.png&#34;&#xA;     alt=&#34;Workaround: Using Google Sheets Tables with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Google Sheets&amp;rsquo; new Tables feature enhances data organization but lacks direct management via Apps Script. This report proposes a workaround solution using Apps Script until native support arrives.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Sheets recently introduced a new feature called Tables. &lt;a href=&#34;https://workspaceupdates.googleblog.com/2024/05/tables-in-google-sheets.html&#34;&gt;Ref&lt;/a&gt; Tables offer a powerful way to organize and manage your data by transforming unformatted ranges into structured datasets with automatic headers, filtering options, and data validation capabilities. This not only improves the readability and maintainability of your spreadsheets but also allows for seamless integration with existing Google Sheets functions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unlocking Power: Leverage the Google Docs API Beyond Apps Script&#39;s Document Service</title>
      <link>https://tanaikech.github.io/2024/10/17/unlocking-power-leverage-the-google-docs-api-beyond-apps-scripts-document-service/</link>
      <pubDate>Thu, 17 Oct 2024 09:05:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/10/17/unlocking-power-leverage-the-google-docs-api-beyond-apps-scripts-document-service/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c53f3280642119c3b187234c03e2adb0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20241017a/fig1.png&#34;&#xA;     alt=&#34;Unlocking Power: Leverage the Google Docs API Beyond Apps Script&amp;#39;s Document Service&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script offers Document service for basic document tasks and Google Docs API for advanced control, requiring more technical expertise. This report bridges the gap with sample scripts to unlock the API&amp;rsquo;s potential.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script provides two powerful tools for managing Google Documents: the Document service (DocumentApp) and the Google Docs API. &lt;a href=&#34;https://developers.google.com/apps-script/reference/document&#34;&gt;Ref&lt;/a&gt;, &lt;a href=&#34;https://developers.google.com/docs/api/reference/rest&#34;&gt;Ref&lt;/a&gt; While the Document service offers a user-friendly interface for common document manipulation tasks within Apps Script, it has limitations. The Google Docs API, on the other hand, grants finer-grained control over document elements and functionalities not readily available through the Document service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Place Rows from a Sheet to Multiple Sheets on Google Spreadsheet using New Javascript Methods with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/10/12/place-rows-from-a-sheet-to-multiple-sheets-on-google-spreadsheet-using-new-javascript-methods-with-google-apps-script/</link>
      <pubDate>Sat, 12 Oct 2024 16:08:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/10/12/place-rows-from-a-sheet-to-multiple-sheets-on-google-spreadsheet-using-new-javascript-methods-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/641d9ff0989951b98eaeca10559932d8&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report showcases a practical application of Google Apps Script, demonstrating how new JavaScript methods can be used to create a script that automatically transfers selected rows between sheets in a Google Sheet.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;JavaScript, a fundamental pillar of contemporary web development, has experienced a significant rise in popularity due to its versatility and widespread adoption. As JavaScript&amp;rsquo;s influence has expanded, so too has Google Apps Script, a cloud-based scripting language constructed on the V8 JavaScript engine. This evolution has led to the introduction of novel methods and features, thereby expanding the capabilities of developers working within the Google Workspace ecosystem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improving Gemini&#39;s Text Generation Accuracy with Corpus Managed by Google Spreadsheet as RAG</title>
      <link>https://tanaikech.github.io/2024/10/09/improving-geminis-text-generation-accuracy-with-corpus-managed-by-google-spreadsheet-as-rag/</link>
      <pubDate>Wed, 09 Oct 2024 08:53:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/10/09/improving-geminis-text-generation-accuracy-with-corpus-managed-by-google-spreadsheet-as-rag/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bed216a816ba19b99618cf7902103a59&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20241009a/fig1.gif&#34;&#xA;     alt=&#34;Improving Gemini&amp;#39;s Text Generation Accuracy with Corpus Managed by Google Spreadsheet as RAG&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Gemini excels at text generation with RAG for large datasets, but smaller ones benefit from prompting or data upload. This report explores using Gemini 1.5 Flash/Pro with RAG on medium-sized, Google Spreadsheet-stored datasets for improved accuracy and effectiveness.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Gemini&amp;rsquo;s text generation capabilities have seen significant advancements with the Retrieval-Augmented Generation (RAG). This approach excels for large datasets, where embedding data and querying the model leads to high-quality answers. However, for smaller datasets, directly including data in the prompt or an uploaded file can be more efficient. &lt;a href=&#34;https://medium.com/google-cloud/harnessing-geminis-power-a-guide-to-generating-content-from-structured-data-45080dac0bbb&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pseudo Function Calling for Gemini API Through Prompt Engineering</title>
      <link>https://tanaikech.github.io/2024/10/01/pseudo-function-calling-for-gemini-api-through-prompt-engineering/</link>
      <pubDate>Tue, 01 Oct 2024 10:39:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/10/01/pseudo-function-calling-for-gemini-api-through-prompt-engineering/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/65c720a1fdc56d99c35b24aeaaa57f7e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This research explores &amp;ldquo;pseudo function calling&amp;rdquo; in Gemini API using prompt engineering with JSON schema, bypassing model dependency limitations.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Large Language Models (LLMs) like Gemini and ChatGPT offer powerful functionalities, but their capabilities can be further extended through function calling. This feature allows the LLM to execute pre-defined functions with arguments generated based on the user&amp;rsquo;s prompt. This unlocks a wide range of applications, as demonstrated in these resources (see References).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/09/26/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Thu, 26 Sep 2024 10:06:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/09/26/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v202&#34;&gt;GeminiWithFiles was updated to v2.0.2&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.2 (September 26, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As the option for &lt;code&gt;generationConfig&lt;/code&gt;, the properties &lt;code&gt;response_schema&lt;/code&gt; and &lt;code&gt;temperature&lt;/code&gt; were added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Harnessing Gemini&#39;s Power: A Guide to Generating Content from Structured Data</title>
      <link>https://tanaikech.github.io/2024/09/25/harnessing-geminis-power-a-guide-to-generating-content-from-structured-data/</link>
      <pubDate>Wed, 25 Sep 2024 15:35:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/09/25/harnessing-geminis-power-a-guide-to-generating-content-from-structured-data/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/395ec09f4ddc9ffdb4c8fafdb39d69ff&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report presents a method to train AI to effectively generate content from smaller, structured datasets using Python. Gemini&amp;rsquo;s token processing capabilities are leveraged to effectively utilize limited data, while techniques for interpreting CSV and JSON formats are explored.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;In the era of rapidly advancing artificial intelligence (AI), the ability to analyze and leverage large datasets is paramount. While RAG (Retrieval Augmented Generation) environments are often ideal for such tasks, there are scenarios where content generation needs to be achieved with smaller datasets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flexible Labeling for Gmail using Gemini API with Google Apps Script Part 3</title>
      <link>https://tanaikech.github.io/2024/09/19/flexible-labeling-for-gmail-using-gemini-api-with-google-apps-script-part-3/</link>
      <pubDate>Thu, 19 Sep 2024 12:02:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/09/19/flexible-labeling-for-gmail-using-gemini-api-with-google-apps-script-part-3/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ed3fdd463b5965503c7b6f3b7db0d4f5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240919a/fig1.png&#34;&#xA;     alt=&#34;Flexible Labeling for Gmail using Gemini API with Google Apps Script Part 3&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report improves Gmail email labeling with Gemini API using JSON schema and leverages advancements in Gemini 1.5 Flash for faster processing.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;As Gemini continues to evolve, existing scripts utilizing its capabilities can be revisited to improve efficiency and accuracy. This includes the process of flexible labeling for Gmail emails using the Gemini API. I have previously explored this topic in two reports:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simplifying Spreadsheet Management: Introducing a Google Apps Script Automation</title>
      <link>https://tanaikech.github.io/2024/09/17/simplifying-spreadsheet-management-introducing-a-google-apps-script-automation/</link>
      <pubDate>Tue, 17 Sep 2024 11:02:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/09/17/simplifying-spreadsheet-management-introducing-a-google-apps-script-automation/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240917a/fig1.png&#34;&#xA;     alt=&#34;Simplifying Spreadsheet Management: Introducing a Google Apps Script Automation&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This post introduces a Google Apps Script solution that automates the creation, sharing, and monitoring of multiple Google Spreadsheets, providing a more efficient and streamlined approach to managing user data.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve often encountered requests from clients who need to manage multiple Google Spreadsheets for various users, often by copying a template spreadsheet. In these situations, I typically propose the following approach:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini-Powered Dynamic Pseudo-RAG for Efficient Script Generation</title>
      <link>https://tanaikech.github.io/2024/09/12/gemini-powered-dynamic-pseudo-rag-for-efficient-script-generation/</link>
      <pubDate>Thu, 12 Sep 2024 15:16:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/09/12/gemini-powered-dynamic-pseudo-rag-for-efficient-script-generation/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7ce4cfebd06cc527cc7107987cdbd15f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report presents a method to optimize AI-generated scripts for processing costs using Gemini and Google Apps Script. By incorporating external knowledge from sources like StackOverflow, we demonstrate the effective generation of efficient scripts that minimize overhead while maintaining desired outcomes. This approach can be considered a dynamic pseudo-RAG technique.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The proliferation of generative AI, exemplified by Google Gemini, has led to a surge in AI-generated scripts. This trend is evident in the growing number of questions on platforms like StackOverflow that involve AI-generated scripts. While this indicates a significant improvement in AI performance, it&amp;rsquo;s crucial to note that AI-generated scripts may not always be optimized for processing costs, especially when the prompt fails to provide sufficient context.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2024/09/04/updated-gas-library-utlapp/</link>
      <pubDate>Wed, 04 Sep 2024 10:07:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/09/04/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v107&#34;&gt;UtlApp was updated to v1.0.7.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.7 (September 4, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Following 3 methods were added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/UtlApp#snakecasetocamelcase&#34;&gt;snake_caseToCamelCase&lt;/a&gt;: This method is used for converting a string of the snake case to the camel case.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/UtlApp#camelcasetosnakecase&#34;&gt;camelCaseTosnake_case&lt;/a&gt;: This method is used for converting a string of the camel case to the snake case.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/UtlApp#createformdataobject&#34;&gt;createFormDataObject&lt;/a&gt;: This method is used for creating the form data to HTTP request from an object.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Versatile Approach to Uploading Files with Node.js: Integrating Gemini, Drive, YouTube, and Other APIs</title>
      <link>https://tanaikech.github.io/2024/08/24/a-versatile-approach-to-uploading-files-with-node.js-integrating-gemini-drive-youtube-and-other-apis/</link>
      <pubDate>Sat, 24 Aug 2024 15:09:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/08/24/a-versatile-approach-to-uploading-files-with-node.js-integrating-gemini-drive-youtube-and-other-apis/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7340cc7c87ec0f701dfb2f0351e02031&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;A script using resumable upload with file streams is proposed to enhance file handling within the Gemini Generative AI API for Node.js. This script allows uploading from web URLs and local storage, efficiently handles large files, and offers potential reusability with other Google APIs.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;The &lt;code&gt;@google/generative-ai&lt;/code&gt; library provides a powerful way to interact with the Gemini Generative AI API using Node.js. This enables developers to programmatically generate creative text formats, translate languages, write different kinds of creative content, and answer your questions in an informative way, all powered by Gemini&amp;rsquo;s advanced AI models. &lt;a href=&#34;https://github.com/google-gemini/generative-ai-js&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Expanding Gemini API&#39;s Capabilities: A Practical Solution for Web Content Summarization</title>
      <link>https://tanaikech.github.io/2024/08/23/expanding-gemini-apis-capabilities-a-practical-solution-for-web-content-summarization/</link>
      <pubDate>Fri, 23 Aug 2024 11:32:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/08/23/expanding-gemini-apis-capabilities-a-practical-solution-for-web-content-summarization/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ba6ae7972838e5a8f0adbec62a722f75&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This study proposes a workaround to address the Gemini API&amp;rsquo;s current inability to directly process web content from URLs. By utilizing Google Apps Script, the method extracts relevant information from a specified URL and feeds it into the API for summarization. This approach offers a solution for generating comprehensive summaries from web-based content until the API&amp;rsquo;s limitations are resolved.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;While Gemini API offers powerful text generation capabilities, it currently faces limitations in directly accessing and processing web content from URLs. When prompted to summarize an article at a specific URL like &lt;code&gt;Summarize the article at the following URL. https://###&lt;/code&gt;, the API often returns an error message indicating its inability to retrieve the necessary information. This limitation arises from the API&amp;rsquo;s current design, which may not be equipped to handle web requests and parse HTML content.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Leveraging GCP for Seamless Google Apps Script Log Export and Analysis with Gemini API</title>
      <link>https://tanaikech.github.io/2024/08/18/leveraging-gcp-for-seamless-google-apps-script-log-export-and-analysis-with-gemini-api/</link>
      <pubDate>Sun, 18 Aug 2024 15:05:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/08/18/leveraging-gcp-for-seamless-google-apps-script-log-export-and-analysis-with-gemini-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/68aa1dfbe041606d0d1df9cbd0079bcd&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Linking a Google Apps Script project to a GCP project enables you to export logs from the Class console to Logs Explorer for simplified analysis and debugging. By overcoming the limitations of in-script logging methods, this report outlines a method for exporting logs using the Cloud Logging API with Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;While developing applications with Google Apps Script, the Class console is a valuable tool for debugging individual components. &lt;a href=&#34;https://developers.google.com/apps-script/reference/base/console&#34;&gt;Ref&lt;/a&gt; However, a key limitation exists: by default, Google Apps Script projects on Google Drive are not linked to Google Cloud Platform (GCP) projects. In this unlinked scenario, logs from the Class console are only visible within the script editor, requiring manual copying for export.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Multiple Files with Split Asynchronous Processes and Resumable Upload in Google Spreadsheets</title>
      <link>https://tanaikech.github.io/2024/08/16/uploading-multiple-files-with-split-asynchronous-processes-and-resumable-upload-in-google-spreadsheets/</link>
      <pubDate>Fri, 16 Aug 2024 15:08:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/08/16/uploading-multiple-files-with-split-asynchronous-processes-and-resumable-upload-in-google-spreadsheets/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/42925de7efc497b5e8eb21f9dae6260d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This sample script demonstrates uploading multiple files using split asynchronous processes with resumable upload. It leverages JavaScript and HTML within Google Spreadsheets.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;In my previous report, &amp;ldquo;&lt;a href=&#34;https://github.com/tanaikech/AsynchronousResumableUploadForGoogleDrive&#34;&gt;Resumable Upload of Multiple Files with Asynchronous Process for Google Drive&lt;/a&gt;&amp;rdquo;, I presented an approach for uploading files asynchronously.&lt;/p&gt;&#xA;&lt;p&gt;This script builds upon that concept, introducing a method for uploading multiple files with split asynchronous processes that utilize resumable upload.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the process breakdown:&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Novel Approach to Learning: Combining Gemini with Google Apps Script for Automated Q&amp;A</title>
      <link>https://tanaikech.github.io/2024/08/08/a-novel-approach-to-learning-combining-gemini-with-google-apps-script-for-automated-qa/</link>
      <pubDate>Thu, 08 Aug 2024 15:05:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/08/08/a-novel-approach-to-learning-combining-gemini-with-google-apps-script-for-automated-qa/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5b472baa500ced516a85e2a24628a03d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240808a/fig1.jpg&#34;&#xA;     alt=&#34;A Novel Approach to Learning: Combining Gemini with Google Apps Script for Automated Q&amp;amp;A&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report proposes a novel learning method using Gemini to automate Q&amp;amp;A generation, addressing the challenges of manual Q&amp;amp;A creation. By integrating with Google tools, this approach aims to enhance learning efficiency, accessibility, and personalization while reducing costs.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Mastering a new subject often demands a significant time commitment. A proven strategy for efficient learning is through question-and-answer (Q&amp;amp;A) practice. This method typically involves constructing a dataset of pertinent Q&amp;amp;A pairs and subsequently engaging in repeated practice until desired proficiency levels are achieved. While platforms such as Google Forms and Google Apps Script can streamline the Q&amp;amp;A creation and evaluation process, the manual generation of Q&amp;amp;A data remains a time-consuming and expensive endeavor. Minimizing the operational costs associated with scripting is crucial for long-term sustainability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/08/04/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Sun, 04 Aug 2024 11:26:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/08/04/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v201&#34;&gt;GeminiWithFiles was updated to v2.0.1&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.1 (August 4, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From this version, &lt;code&gt;codeExecution&lt;/code&gt; can be used. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles?tab=readme-ov-file#usecodeexecution&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Application - UnlockSmartInvoiceManagementWithGeminiAPI</title>
      <link>https://tanaikech.github.io/2024/08/03/updated-gas-application-unlocksmartinvoicemanagementwithgeminiapi/</link>
      <pubDate>Sat, 03 Aug 2024 14:36:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/08/03/updated-gas-application-unlocksmartinvoicemanagementwithgeminiapi/</guid>
      <description>&lt;h2 id=&#34;unlocksmartinvoicemanagementwithgeminiapi-was-updated-to-v103&#34;&gt;UnlockSmartInvoiceManagementWithGeminiAPI was updated to v1.0.3.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (August 3, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;On August 3, 2024, I upated GeminiWithFiles (&lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles)&#34;&gt;https://github.com/tanaikech/GeminiWithFiles)&lt;/a&gt;. In this version, PDF data can be processed with Gemini API without async/await. So, I updated UnlockSmartInvoiceManagementWithGeminiAPI.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UnlockSmartInvoiceManagementWithGeminiAPI&#34;&gt;https://github.com/tanaikech/UnlockSmartInvoiceManagementWithGeminiAPI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/08/03/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Sat, 03 Aug 2024 14:20:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/08/03/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v200&#34;&gt;GeminiWithFiles was updated to v2.0.0&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.0 (August 3, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From this version, the following changes were made.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PDF data can be directly used. &lt;a href=&#34;https://medium.com/google-cloud/gemini-api-revolutionizing-content-generation-with-direct-pdf-input-105493780fa4&#34;&gt;Ref&lt;/a&gt; By this, PDFApp is not required to be used. By this, the script can be used without async/await.&lt;/li&gt;&#xA;&lt;li&gt;As the default, &lt;code&gt;functions: {}&lt;/code&gt; is used. So, the default function calling was removed. Because in the current stage, JSON output can be easily returned using a JSON schema and &lt;code&gt;response_mime_type&lt;/code&gt;. &lt;a href=&#34;https://medium.com/google-cloud/gemini-api-with-json-schema-3dbdabac7d19&#34;&gt;Ref&lt;/a&gt; &lt;a href=&#34;https://medium.com/google-cloud/taming-the-wild-output-effective-control-of-gemini-api-response-formats-with-response-mime-type-da273c08be85&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;The default model was changed from &lt;code&gt;models/gemini-1.5-pro-latest&lt;/code&gt; to &lt;code&gt;models/gemini-1.5-flash-latest&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The export values with &lt;code&gt;exportTotalTokens&lt;/code&gt; were changed. After v2.x.x, when this is true, the object &lt;code&gt;usageMetadata&lt;/code&gt; including &lt;code&gt;promptTokenCount&lt;/code&gt;, &lt;code&gt;candidatesTokenCount&lt;/code&gt;, &lt;code&gt;totalTokenCount&lt;/code&gt; is exported. At that time, the generated content and &lt;code&gt;usageMetadata&lt;/code&gt; are returned as an object.&lt;/li&gt;&#xA;&lt;li&gt;After v2.x.x, the large files can be uploaded to Gemini. This is from &lt;a href=&#34;https://github.com/tanaikech/UploadApp&#34;&gt;this respository&lt;/a&gt; and &lt;a href=&#34;https://medium.com/google-cloud/uploading-large-files-to-gemini-with-google-apps-script-overcoming-50-mb-limit-6ea63204ee81&#34;&gt;this post&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini API: Revolutionizing Content Generation with Direct PDF Input</title>
      <link>https://tanaikech.github.io/2024/07/23/gemini-api-revolutionizing-content-generation-with-direct-pdf-input/</link>
      <pubDate>Tue, 23 Jul 2024 14:17:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/07/23/gemini-api-revolutionizing-content-generation-with-direct-pdf-input/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b932e8b52b098c600c160988e48a5cd6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240723b/fig1.png&#34;&#xA;     alt=&#34;Gemini API: Revolutionizing Content Generation with Direct PDF Input&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Gemini API now enables direct PDF processing for content generation, eliminating image conversion and reducing costs. This report provides a sample script to demonstrate this new capability and its potential applications.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Gemini API has recently introduced the ability to directly process PDF data for content generation, significantly enhancing its capabilities. Previously, to utilize PDF data for content creation, it was necessary to convert each PDF page into a separate image format. This time-consuming and resource-intensive process has been eliminated, resulting in substantially reduced processing costs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Convert Google Document to Markdown and vice versa using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/07/23/convert-google-document-to-markdown-and-vice-versa-using-google-apps-script/</link>
      <pubDate>Tue, 23 Jul 2024 11:51:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/07/23/convert-google-document-to-markdown-and-vice-versa-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0deba74c2003d997f67fb2b04dedb1d0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240723a/fig1.png&#34;&#xA;     alt=&#34;Convert Google Document to Markdown and vice versa using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Great news for fans of both Google Docs and Markdown! Google Docs recently acquired the ability to export documents directly into the markdown format. &lt;a href=&#34;https://workspaceupdates.googleblog.com/2024/07/import-and-export-markdown-in-google-docs.html&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This functionality extends beyond the user interface, with early indications suggesting the Google Drive API might also be capable of converting between Google Docs and Markdown. I confirmed that this could also be achieved by Drive API. This opens exciting possibilities for automated workflows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Application - UnlockSmartInvoiceManagementWithGeminiAPI</title>
      <link>https://tanaikech.github.io/2024/07/23/updated-gas-application-unlocksmartinvoicemanagementwithgeminiapi/</link>
      <pubDate>Tue, 23 Jul 2024 10:46:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/07/23/updated-gas-application-unlocksmartinvoicemanagementwithgeminiapi/</guid>
      <description>&lt;h2 id=&#34;unlocksmartinvoicemanagementwithgeminiapi-was-updated-to-v102&#34;&gt;UnlockSmartInvoiceManagementWithGeminiAPI was updated to v1.0.2.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (July 23, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;On July 23, 2024, I noticed that PDF data could be directly parsed by Gemini API. It is considered that this is due to the update by the Google side. So, I updated &lt;code&gt;setBlobs([blob], true)&lt;/code&gt; to &lt;code&gt;setBlobs([blob], false)&lt;/code&gt; of the method &lt;code&gt;parseInvoiceByGemini_&lt;/code&gt;. By this modification, the PDF blob is directly used with Gemini API. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles?tab=readme-ov-file#setblobs&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UnlockSmartInvoiceManagementWithGeminiAPI&#34;&gt;https://github.com/tanaikech/UnlockSmartInvoiceManagementWithGeminiAPI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Large Files to Gemini with Google Apps Script: Overcoming 50 MB Limit</title>
      <link>https://tanaikech.github.io/2024/07/11/uploading-large-files-to-gemini-with-google-apps-script-overcoming-50-mb-limit/</link>
      <pubDate>Thu, 11 Jul 2024 11:10:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/07/11/uploading-large-files-to-gemini-with-google-apps-script-overcoming-50-mb-limit/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ad5b87df2842ecd2f9864784ac6bbecb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240711a/fig1.png&#34;&#xA;     alt=&#34;Uploading Large Files to Gemini with Google Apps Script: Overcoming 50 MB Limit&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Uploads in Google Apps Script are limited to 50 MB, hindering work with large datasets. This report introduces a script with &lt;code&gt;uploadType=resumable&lt;/code&gt; to overcome this limit, enabling uploads over 50 MB to Gemini and other services.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;This report explores the limitations of data upload size using Google Apps Script and introduces a script to overcome these limitations. In the current stage, Gemini API can generate content using the uploaded data to Gemini. You can find more information on this in a previous report. &lt;a href=&#34;https://medium.com/google-cloud/generating-texts-using-files-uploaded-by-gemini-1-5-api-5777f1c902ab&#34;&gt;Ref&lt;/a&gt; As mentioned in the report, Google Apps Script uses &lt;code&gt;uploadType=multipart&lt;/code&gt; for uploading files. However, the maximum file size is limited to 5 MB with this method for Drive API. &lt;a href=&#34;https://developers.google.com/drive/api/guides/manage-uploads&#34;&gt;Ref&lt;/a&gt; While I confirmed that the Gemini API allows for uploading over about 20 MB with &lt;code&gt;uploadType=multipart&lt;/code&gt;, Google Apps Script enforces a stricter 50 MB limit for both uploads and downloads. &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/quotas#current_limitations&#34;&gt;Ref&lt;/a&gt; This can be inconvenient when working with larger datasets, such as movie or text data, which often exceed this limit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/07/04/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Thu, 04 Jul 2024 14:08:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/07/04/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v107&#34;&gt;GeminiWithFiles was updated to v1.0.7.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.7 (July 4, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From this version, when &lt;code&gt;doCountToken: true&lt;/code&gt; and &lt;code&gt;exportTotalTokens: true&lt;/code&gt; are used in the object of the argument of &lt;code&gt;geminiWithFiles&lt;/code&gt;, the total tokens are returned. In this case, the returned value is an object like &lt;code&gt;{returnValue: &amp;quot;###&amp;quot;, totalTokens: ###}&lt;/code&gt;. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles?tab=readme-ov-file#export-total-tokens&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - TriggerApp</title>
      <link>https://tanaikech.github.io/2024/06/26/updated-gas-library-triggerapp/</link>
      <pubDate>Wed, 26 Jun 2024 10:31:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/26/updated-gas-library-triggerapp/</guid>
      <description>&lt;h2 id=&#34;triggerapp-was-updated-to-v103&#34;&gt;TriggerApp was updated to v1.0.3.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (June 26, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The calculation for increasing the month was modified.&lt;/li&gt;&#xA;&lt;li&gt;A new scenario 8 was added. In scenario 8, you can see how to use the month-end. &lt;a href=&#34;https://github.com/tanaikech/TriggerApp?tab=readme-ov-file#scenario8&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/TriggerApp&#34;&gt;https://github.com/tanaikech/TriggerApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Analyzing Folder Structures with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/06/22/analyzing-folder-structures-with-google-apps-script/</link>
      <pubDate>Sat, 22 Jun 2024 14:38:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/22/analyzing-folder-structures-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/aa654883775702d02bc3e40fdc3af69e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report provides a Google Apps Script to retrieve all files, including those within subfolders, for a designated folder. It addresses the challenges of retrieving files within deeply nested folder structures and obtaining complete file paths.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script empowers developers to interact with Google Drive data programmatically, unlocking a wide range of functionalities. A core component of this interaction is the Drive service (DriveApp) and Drive API. These services provide programmatic control over files and folders within your Drive.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - MoveFolder</title>
      <link>https://tanaikech.github.io/2024/06/18/updated-gas-library-movefolder/</link>
      <pubDate>Tue, 18 Jun 2024 09:03:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/18/updated-gas-library-movefolder/</guid>
      <description>&lt;h2 id=&#34;movefolder-was-updated-to-v101&#34;&gt;MoveFolder was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (June 18, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In the recent update on the Google side, it was found that in the current stage, when the other libraries are loaded from a library, an error like &lt;code&gt;We&#39;re sorry, a server error occurred while reading from storage. Error code NOT_FOUND&lt;/code&gt; occurs. So, from v1.0.1, the library of BatchRequest is included in this library.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/MoveFolder&#34;&gt;https://github.com/tanaikech/MoveFolder&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Application - UnlockSmartInvoiceManagementWithGeminiAPI</title>
      <link>https://tanaikech.github.io/2024/06/17/updated-gas-application-unlocksmartinvoicemanagementwithgeminiapi/</link>
      <pubDate>Mon, 17 Jun 2024 14:37:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/17/updated-gas-application-unlocksmartinvoicemanagementwithgeminiapi/</guid>
      <description>&lt;h2 id=&#34;unlocksmartinvoicemanagementwithgeminiapi-was-updated-to-v101&#34;&gt;UnlockSmartInvoiceManagementWithGeminiAPI was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (June 17, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In order to easily customize the value of &amp;ldquo;jsonSchema&amp;rdquo; for generating content with Gemini API, I added it as a new sheet of &amp;ldquo;jsonSchema&amp;rdquo; sheet in the Spreadsheet. When you customize it, you can edit the cell &amp;ldquo;A1&amp;rdquo; of the &amp;ldquo;jsonSchema&amp;rdquo; sheet. By this, the script generates content with Gemini API using your customized JSON schema. The cell &amp;ldquo;A2&amp;rdquo; is the number of characters of &amp;ldquo;A1&amp;rdquo;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UnlockSmartInvoiceManagementWithGeminiAPI&#34;&gt;https://github.com/tanaikech/UnlockSmartInvoiceManagementWithGeminiAPI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/06/15/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Sat, 15 Jun 2024 16:32:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/15/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v106&#34;&gt;GeminiWithFiles was updated to v1.0.6.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.6 (June 15, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Included the script of PDFApp in this library.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unlock Smart Invoice Management: Gemini, Gmail, and Google Apps Script Integration</title>
      <link>https://tanaikech.github.io/2024/06/15/unlock-smart-invoice-management-gemini-gmail-and-google-apps-script-integration/</link>
      <pubDate>Sat, 15 Jun 2024 14:58:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/15/unlock-smart-invoice-management-gemini-gmail-and-google-apps-script-integration/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9c8fca16c2de5ee943f39adbd67c34db&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240615a/fig1.jpg&#34;&#xA;     alt=&#34;Unlock Smart Invoice Management: Gemini, Gmail, and Google Apps Script Integration&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;You can see the presentation of this application at &lt;a href=&#34;https://www.youtube.com/watch?v=Dc2WPQkovZE&#34;&gt;https://www.youtube.com/watch?v=Dc2WPQkovZE&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report describes an invoice processing application built with Google Apps Script. It leverages Gemini, a large language model, to automatically parse invoices received as email attachments and automates the process using time-driven triggers.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The emergence of large language models (LLMs) like ChatGPT and Gemini has significantly impacted various aspects of our daily lives. One such example is their ability to automate tasks previously requiring manual effort. In my case, Gemini has streamlined the processing of invoices I receive as email attachments in PDF format.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/06/07/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Fri, 07 Jun 2024 14:02:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/07/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v105&#34;&gt;GeminiWithFiles was updated to v1.0.5.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.5 (June 7, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Spelling mistakes in the warning message were modified. The wait time for changing the value of state for the movie file is changed from 5 seconds to 10 seconds per cycle.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - MoveFolder</title>
      <link>https://tanaikech.github.io/2024/06/06/gas-library-movefolder/</link>
      <pubDate>Thu, 06 Jun 2024 11:58:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/06/gas-library-movefolder/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240606a/fig1.png&#34;&#xA;     alt=&#34;GAS Library - MoveFolder&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for moving a folder including files and folders on Google Drive.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;This library addresses a common challenge: efficiently moving folders, including their subfolders and files, between Google Drives. This encompasses both personal and shared drives using a script. While Google Drive offers straightforward methods for moving individual files between any drives, directly moving entire folders containing subfolders presents limitations, particularly when shared drives are involved. This script bridges that gap by providing a reliable Google Apps Script solution for such scenarios.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Move Folder including Files and Folders in Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/06/06/move-folder-including-files-and-folders-in-google-drive-using-google-apps-script/</link>
      <pubDate>Thu, 06 Jun 2024 11:42:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/06/move-folder-including-files-and-folders-in-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5e79afbc50be824e02c6ba138f905e5c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240606a/fig1.png&#34;&#xA;     alt=&#34;Move Folder including Files and Folders in Google Drive using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This script automates moving a folder including files and folders between Google Drives (personal or shared) by recreating the folder structure and transferring files, overcoming limitations for shared drives.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;This report addresses a common challenge: efficiently moving folders, including their subfolders and files, between Google Drives, encompassing both personal and shared drives using a script. While Google Drive offers straightforward methods for moving individual files between any drives, directly moving entire folders containing subfolders presents limitations, particularly when shared drives are involved. This script bridges that gap by providing a reliable Google Apps Script solution for such scenarios.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - FilesApp</title>
      <link>https://tanaikech.github.io/2024/06/05/updated-gas-library-filesapp/</link>
      <pubDate>Wed, 05 Jun 2024 09:40:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/05/updated-gas-library-filesapp/</guid>
      <description>&lt;p&gt;FilesApp was updated to v1.1.4.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.4 (June 5, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A bug for retrieving metadata from the shared drive was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/FilesApp&#34;&gt;GitHub of FilesApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>My post was featured in The overwhelmed person’s guide to Google Cloud: week of May 23</title>
      <link>https://tanaikech.github.io/2024/06/03/my-post-was-featured-in-the-overwhelmed-persons-guide-to-google-cloud-week-of-may-23/</link>
      <pubDate>Mon, 03 Jun 2024 08:11:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/03/my-post-was-featured-in-the-overwhelmed-persons-guide-to-google-cloud-week-of-may-23/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://medium.com/google-cloud/leveraging-gemini-1-5-api-for-automated-test-case-generation-reverse-engineering-2ee8789f01db&#34;&gt;My post&lt;/a&gt; was featured in the section &amp;ldquo;Community cuts&amp;rdquo; of &lt;a href=&#34;https://cloud.google.com/blog/products/gcp/the-overwhelmed-persons-guide-to-google-cloud&#34;&gt;&amp;ldquo;The overwhelmed person’s guide to Google Cloud: week of May 23&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Expanding Error Messages for Google Apps Script with Gemini 1.5 Flash</title>
      <link>https://tanaikech.github.io/2024/06/02/expanding-error-messages-for-google-apps-script-with-gemini-1.5-flash/</link>
      <pubDate>Sun, 02 Jun 2024 15:46:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/06/02/expanding-error-messages-for-google-apps-script-with-gemini-1.5-flash/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d068afd87fb990fbe0f38c192306a139&#34;&gt;Gitst&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240602a/fig1.jpg&#34;&#xA;     alt=&#34;Expanding Error Messages for Google Apps Script with Gemini 1.5 Flash&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report builds on prior work using Gemini 1.0 Pro to expand Google Apps Script error messages. It highlights how the script&amp;rsquo;s execution time limit created a bottleneck, but the introduction of Gemini 1.5 Flash eliminates this issue.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;After the release of the Gemini API, I previously reported on &amp;ldquo;Expanding Error Messages of Google Apps Script using Gemini Pro API with Google Apps Script&amp;rdquo;. &lt;a href=&#34;https://medium.com/google-cloud/expanding-error-messages-of-google-apps-script-using-gemini-pro-api-with-google-apps-script-cafcd0cdb628&#34;&gt;Ref&lt;/a&gt; In that report, I utilized the Gemini 1.0 Pro model. While expanding error messages proved valuable for understanding script errors in detail, Google Apps Script currently has a maximum execution time of 6 minutes. &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/quotas#current_limitations&#34;&gt;Ref&lt;/a&gt; This meant that processing time for content generation by the Gemini API significantly impacted the total process time when dealing with large scripts, creating a bottleneck.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/05/29/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Wed, 29 May 2024 14:31:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/29/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v104&#34;&gt;GeminiWithFiles was updated to v1.0.4.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.4 (May 29, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Recently, when &lt;code&gt;model.countToken&lt;/code&gt; is used with the uploaded files, I confirmed that an error like &lt;code&gt;You do not have permission to access the File ### or it may not exist.&lt;/code&gt; occurred. In order to handle this issue, I modified the library.&lt;/li&gt;&#xA;&lt;li&gt;In order to use the movie files for generateContent, I modified the library. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles?tab=readme-ov-file#generatecontentwithamoviefile&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Techniques for Creating Nested Lists on Google Documents using Google Docs API</title>
      <link>https://tanaikech.github.io/2024/05/28/techniques-for-creating-nested-lists-on-google-documents-using-google-docs-api/</link>
      <pubDate>Tue, 28 May 2024 17:09:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/28/techniques-for-creating-nested-lists-on-google-documents-using-google-docs-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c3d409c44579a9c23382e20400f51d4c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Current Google Docs API documentation offers methods for working with existing lists but lacks instructions for creating nested lists in new documents. This report fills this gap, empowering developers and streamlining nested list creation using Google Apps Script (concepts applicable to other languages).&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The official Google Docs API documentation provides instructions for working with existing lists, including converting paragraphs to lists and removing bullets. However, it lacks guidance on creating nested lists within an empty document body. &lt;a href=&#34;https://developers.google.com/docs/api/how-tos/lists&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enhancing HTML and Javascript Development in Script Editor of Google Apps Script: Overcoming Formatting Challenges</title>
      <link>https://tanaikech.github.io/2024/05/27/enhancing-html-and-javascript-development-in-script-editor-of-google-apps-script-overcoming-formatting-challenges/</link>
      <pubDate>Mon, 27 May 2024 10:18:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/27/enhancing-html-and-javascript-development-in-script-editor-of-google-apps-script-overcoming-formatting-challenges/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/be52daa21ccf07873ad2a2e43e566676&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240527a/fig1.jpg&#34;&#xA;     alt=&#34;Enhancing HTML and Javascript Development in Script Editor of Google Apps Script: Overcoming Formatting Challenges&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Despite the improved Google Apps Script IDE launched in April 2022, challenges arise for HTML and Javascript development. The Script Editor&amp;rsquo;s built-in formatting for these languages proves insufficient, particularly for large Javascript codebases, potentially causing errors. This report proposes a solution to address this formatting issue and streamline development within the Script Editor.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Javascript library - ResumableUploadForGoogleDrive_js</title>
      <link>https://tanaikech.github.io/2024/05/23/updated-javascript-library-resumableuploadforgoogledrive_js/</link>
      <pubDate>Thu, 23 May 2024 15:47:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/23/updated-javascript-library-resumableuploadforgoogledrive_js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ResumableUploadForGoogleDrive_js&#34;&gt;ResumableUploadForGoogleDrive_js&lt;/a&gt; was updated to v2.0.2.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.2 (May 23, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From this version, the files could be also uploaded to the shared drive.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;cdn&#34;&gt;CDN&lt;/h2&gt;&#xA;&lt;h3 id=&#34;class-resumableuploadtogoogledrive&#34;&gt;Class ResumableUploadToGoogleDrive&lt;/h3&gt;&#xA;&lt;p&gt;This Class can achieve the resumable upload of a file by reading the file to the memory.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdn.jsdelivr.net/gh/tanaikech/ResumableUploadForGoogleDrive_js@2.0.2/resumableupload_js.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;class-resumableuploadtogoogledrive2&#34;&gt;Class ResumableUploadToGoogleDrive2&lt;/h3&gt;&#xA;&lt;p&gt;This Class can achieve the resumable upload of a file by directly reading partially the file from the local Disk. By this, the large file which is over the memory of the local PC can be uploaded.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Taming the Wild Output: Effective Control of Gemini API Response Formats with response_schema</title>
      <link>https://tanaikech.github.io/2024/05/21/taming-the-wild-output-effective-control-of-gemini-api-response-formats-with-response_schema/</link>
      <pubDate>Tue, 21 May 2024 15:57:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/21/taming-the-wild-output-effective-control-of-gemini-api-response-formats-with-response_schema/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c99089b7b82562bfc5bf5c4bd8306c07&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240521a/fig1.jpg&#34;&#xA;     alt=&#34;Taming the Wild Output: Effective Control of Gemini API Response Formats with response_schema&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API traditionally required specific prompts for desired output formats. This report explores two new GenerationConfig properties: &amp;ldquo;response_mime_type&amp;rdquo; and &amp;ldquo;response_schema&amp;rdquo;. These allow developers to directly specify formats like JSON, enhancing control and predictability. We analyze and compare the effectiveness of both properties for controlling Gemini API output formats.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;One of the key challenges when working with the Gemini API is ensuring the output data is delivered in the format your application requires. Traditionally, the response format heavily relied on the specific prompt you provided. For example, retrieving data as a structured JSON object necessitated including a &amp;ldquo;Return JSON&amp;rdquo; prompt within your input text. This approach could be cumbersome and error-prone if the desired format wasn&amp;rsquo;t explicitly requested.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/05/17/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Fri, 17 May 2024 14:53:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/17/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v103&#34;&gt;GeminiWithFiles was updated to v1.0.3.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (May 17, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Bugs were removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ImgApp</title>
      <link>https://tanaikech.github.io/2024/05/16/updated-gas-library-imgapp/</link>
      <pubDate>Thu, 16 May 2024 11:13:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/16/updated-gas-library-imgapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;ImgApp&lt;/a&gt; was updated to v1.3.3.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.3.3 (May 16, 2024)&#xA;In SlidesAppp.gs, added a script for checking whether Drive API and Slides API are enabled. &lt;a href=&#34;https://medium.com/@tanaike/checking-api-enabled-with-advanced-google-services-using-google-apps-script-572bcdeb39a8&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;https://github.com/tanaikech/ImgApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Checking API Enabled with Advanced Google Services using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/05/16/checking-api-enabled-with-advanced-google-services-using-google-apps-script/</link>
      <pubDate>Thu, 16 May 2024 10:52:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/16/checking-api-enabled-with-advanced-google-services-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3f03dac24179f750c013abc39703c4d2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240516a/fig1.jpg&#34;&#xA;     alt=&#34;Checking API Enabled with Advanced Google Services using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This script checks if the desired API is enabled or disabled in the Advanced Google Services section of Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;As of December 11, 2023, Drive API v3 became available for use in Advanced Google Services. &lt;a href=&#34;https://developers.google.com/apps-script/docs/release-notes#December_11_2023&#34;&gt;Ref&lt;/a&gt; This means you can now choose between v2 and v3 in your scripts. However, when Drive API is enabled, version 3 is automatically selected. This caused compatibility issues with previously published libraries that relied on v2.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - PDFApp</title>
      <link>https://tanaikech.github.io/2024/05/15/updated-gas-library-pdfapp/</link>
      <pubDate>Wed, 15 May 2024 16:24:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/15/updated-gas-library-pdfapp/</guid>
      <description>&lt;h2 id=&#34;pdfapp-was-updated-to-v107&#34;&gt;PDFApp was updated to v1.0.7.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.7 (May 15, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The method of &amp;ldquo;addPageNumbers&amp;rdquo; was updated. &lt;a href=&#34;https://github.com/tanaikech/PDFApp?tab=readme-ov-file#addpagenumbers&#34;&gt;Ref&lt;/a&gt; When a number is used to the property &lt;code&gt;x&lt;/code&gt; instead of &amp;ldquo;left&amp;rdquo;, &amp;ldquo;center&amp;rdquo;, and &amp;ldquo;right&amp;rdquo;, the inputted number is directly used.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/PDFApp&#34;&gt;https://github.com/tanaikech/PDFApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - PDFApp</title>
      <link>https://tanaikech.github.io/2024/05/15/updated-gas-library-pdfapp/</link>
      <pubDate>Wed, 15 May 2024 11:02:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/15/updated-gas-library-pdfapp/</guid>
      <description>&lt;h2 id=&#34;pdfapp-was-updated-to-v106&#34;&gt;PDFApp was updated to v1.0.6.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.6 (May 15, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A new method of &amp;ldquo;addPageNumbers&amp;rdquo; was added. &lt;a href=&#34;%5B#addpagenumbers%5D(https://github.com/tanaikech/PDFApp?tab=readme-ov-file#addpagenumbers)&#34;&gt;Ref&lt;/a&gt; This method adds the page numbers to each page of the PDF.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/PDFApp&#34;&gt;https://github.com/tanaikech/PDFApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding Page Numbers to PDF using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/05/15/adding-page-numbers-to-pdf-using-google-apps-script/</link>
      <pubDate>Wed, 15 May 2024 09:18:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/15/adding-page-numbers-to-pdf-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/05834ac8e605922637af9a4cfdecc152&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240515a/fig1.png&#34;&#xA;     alt=&#34;Adding Page Numbers to PDF using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;This is a simple sample script for adding the page numbers to PDF data using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When you use this script, please copy and paste the following script to the script editor of Google Apps Script. And, please set the file ID of the PDF file.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sample-script&#34;&gt;Sample script&lt;/h3&gt;&#xA;&lt;p&gt;In this script, &lt;a href=&#34;https://pdf-lib.js.org/&#34;&gt;pdf-lib&lt;/a&gt; is used.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * ### Description&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * Add page numbers to PDF.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {Object} blob PDF blob.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {Object} pageFormat Format of page number.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @returns {Blob} Updated PDF blob.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;addPageNumbers_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormat&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentType&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDF&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Blob is not PDF.&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Load pdf-lib&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdn.jsdelivr.net/npm/pdf-lib/dist/pdf-lib.min.js&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  eval(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;/setTimeout\(.*?,.*?(\d*?)\)/g&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Utilities.sleep($1);return t();&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Uint8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBytes&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfData&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PDFLib&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDFDocument&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;load&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PDFLib&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDFDocument&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;create&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;copyPages&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;pdfData&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getPageIndices&lt;/span&gt;())).&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;color:#a6e22e&#34;&gt;page&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt; } &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;page&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSize&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;center&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;right&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormatObj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { ...&lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormat&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormatObj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormat&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;page&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;drawText&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormatObj&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addPage&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;page&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bytes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;save&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Int8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bytes&lt;/span&gt;)],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;MimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDF&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`new_&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;()&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sample1&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the file ID of the PDF file.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfBlob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;(); &lt;span style=&#34;color:#75715e&#34;&gt;// Of course, you can directly give the PDF blob.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormat&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;center&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;addPageNumbers_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;pdfBlob&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormat&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// This function is a simple demonstration script.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sample2&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Create a sample Google Document.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempDoc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DocumentApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;create&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tempDoc&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBody&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;appendParagraph&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`sample text &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;appendPageBreak&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;tempDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;saveAndClose&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfBlob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Add page numbers.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormat&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;center&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;addPageNumbers_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;pdfBlob&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;pageFormat&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;When you run the function &lt;code&gt;sample1&lt;/code&gt;, the page numbers are added to the center of each page.&lt;/li&gt;&#xA;&lt;li&gt;When you run the function &lt;code&gt;sample2&lt;/code&gt;, a new Google Document is created including 5 pages. And, the page numbers are added to the center of each page.&lt;/li&gt;&#xA;&lt;li&gt;In this sample, a simple format like &lt;code&gt;{ size: 10, x: &amp;quot;center&amp;quot;, y: 10 }&lt;/code&gt; is used for the page numbers. Here, the page numbers are put to only &amp;ldquo;left&amp;rdquo;, &amp;ldquo;center&amp;rdquo;, and &amp;ldquo;right&amp;rdquo; of the bottom of the page. But, there are various parameters in DrawTextOptions. &lt;a href=&#34;https://pdf-lib.js.org/docs/api/interfaces/drawtextoptions&#34;&gt;Ref&lt;/a&gt; So, when you want to customize more, please modify the script.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Leveraging Gemini 1.5 API for Automated Test Case Generation in Google Apps Script Reverse Engineering</title>
      <link>https://tanaikech.github.io/2024/05/08/leveraging-gemini-1.5-api-for-automated-test-case-generation-in-google-apps-script-reverse-engineering/</link>
      <pubDate>Wed, 08 May 2024 14:24:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/08/leveraging-gemini-1.5-api-for-automated-test-case-generation-in-google-apps-script-reverse-engineering/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fc51414e16faa2a26aa39eea487d64a5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240508a/fig1.jpg&#34;&#xA;     alt=&#34;Leveraging Gemini 1.5 API for Automated Test Case Generation in Google Apps Script Reverse Engineering&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report examines leveraging Gemini 1.5 API with Google Apps Script to automate sample input creation during script reverse engineering. Traditionally, this process is manual and time-consuming, especially for functions with numerous test cases. Gemini 1.5 API&amp;rsquo;s potential to streamline development by automating input generation is explored through applying reverse engineering techniques to Google Apps Script samples.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini API with JSON schema</title>
      <link>https://tanaikech.github.io/2024/05/07/gemini-api-with-json-schema/</link>
      <pubDate>Tue, 07 May 2024 16:33:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/07/gemini-api-with-json-schema/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/45b1a738b9e27236545a3cbcc1479a58&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;These are sample scripts in Python and Node.js for controlling the output format of the Gemini API using JSON schemas.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;In a previous report, &amp;ldquo;Taming the Wild Output: Effective Control of Gemini API Response Formats with response_mime_type,&amp;rdquo; I presented sample scripts created with Google Apps Script. &lt;a href=&#34;https://medium.com/google-cloud/taming-the-wild-output-effective-control-of-gemini-api-response-formats-with-response-mime-type-da273c08be85&#34;&gt;Ref&lt;/a&gt; Following its publication, I received requests for sample scripts using Python and Node.js. This report addresses those requests by providing sample scripts in both languages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/05/07/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Tue, 07 May 2024 10:25:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/07/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v102&#34;&gt;GeminiWithFiles was updated to v1.0.2.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (May 7, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For generating content, &lt;code&gt;parts&lt;/code&gt; was added. From this version, you can select one of &lt;code&gt;q&lt;/code&gt;, &lt;code&gt;jsonSchema&lt;/code&gt;, and &lt;code&gt;parts&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;From this version, &lt;code&gt;systemInstruction&lt;/code&gt; can be used.&lt;/li&gt;&#xA;&lt;li&gt;In order to call the function call, &lt;code&gt;toolConfig&lt;/code&gt; was added to the request body.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2024/05/04/updated-gas-library-utlapp/</link>
      <pubDate>Sat, 04 May 2024 20:05:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/04/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v106&#34;&gt;UtlApp was updated to v1.0.6.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.6 (May 4, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Methods of &lt;a href=&#34;https://github.com/tanaikech/UtlApp?tab=readme-ov-file#blobtodataurl&#34;&gt;blobToDataUrl&lt;/a&gt; was added. When this method is used, the Blob data can be converted to the data URL.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inserting Animated GIFs over Cells on Google Sheets using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/05/03/inserting-animated-gifs-over-cells-on-google-sheets-using-google-apps-script/</link>
      <pubDate>Fri, 03 May 2024 15:26:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/03/inserting-animated-gifs-over-cells-on-google-sheets-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fe3a0fd36ee47685b07ce6db2fbae1ce&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This script demonstrates how to insert an animated GIF over cells in a Google Sheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;I recently received a request to create a Google Apps Script for inserting animated GIFs into cells on a Google Sheet. I previously published a sample script on my blog on June 6, 2017. &lt;a href=&#34;https://tanaikech.github.io/2017/06/06/embedding-animation-gif-in-a-cell-on-spreadsheet/&#34;&gt;Ref&lt;/a&gt; In that script, the animation GIF was inserted using a public link. This new script leverages data URLs, which simplifies the process for using GIFs stored in Google Drive. Since this approach might be helpful to others, I&amp;rsquo;m sharing it here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/05/02/updated-gas-library-geminiwithfiles/</link>
      <pubDate>Thu, 02 May 2024 11:18:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/02/updated-gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;geminiwithfiles-was-updated-to-v101&#34;&gt;GeminiWithFiles was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (May 2, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;response_mime_type&lt;/code&gt; got to be able to be used for controlling the output format. &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles?tab=readme-ov-file#samplesresponsemimetype&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GeminiWithFiles&#34;&gt;https://github.com/tanaikech/GeminiWithFiles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Taming the Wild Output: Effective Control of Gemini API Response Formats with response_mime_type</title>
      <link>https://tanaikech.github.io/2024/05/01/taming-the-wild-output-effective-control-of-gemini-api-response-formats-with-response_mime_type/</link>
      <pubDate>Wed, 01 May 2024 13:57:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/05/01/taming-the-wild-output-effective-control-of-gemini-api-response-formats-with-response_mime_type/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0a55011d3e8b8fadebb71b624bb9a8af&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240501a/fig1.jpg&#34;&#xA;     alt=&#34;Taming the Wild Output: Effective Control of Gemini API Response Formats with response_mime_type&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report explores controlling output formats for the Gemini API. Traditionally, prompts dictated the format. A new property, &amp;ldquo;response_mime_type&amp;rdquo;, allows specifying the format (e.g., JSON) directly. Testing confirms this property improves control over output format, especially for complex JSON schemas. The recommended approach is to combine a detailed JSON schema with &amp;ldquo;response_mime_type&amp;rdquo; for clear and consistent outputs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - GeminiWithFiles</title>
      <link>https://tanaikech.github.io/2024/04/26/gas-library-geminiwithfiles/</link>
      <pubDate>Fri, 26 Apr 2024 15:33:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/26/gas-library-geminiwithfiles/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for Gemini API with files.&lt;/p&gt;&#xA;&lt;p&gt;A new Google Apps Script library called GeminiWithFiles simplifies using Gemini, a large language model, to process unstructured data like images and PDFs. GeminiWithFiles can upload files, generate content, and create descriptions from multiple images at once. This significantly reduces workload and expands possibilities for using Gemini.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Recently, Gemini, a large language model from Google AI, has brought new possibilities to various tasks by enabling the use of unstructured data as structured data. This is particularly significant because a vast amount of information exists in unstructured formats like text documents, images, and videos.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Batch Processing Powerhouse: Leverage Gemini 1.5 API and Google Apps Script for Efficient Content Workflows</title>
      <link>https://tanaikech.github.io/2024/04/26/batch-processing-powerhouse-leverage-gemini-1.5-api-and-google-apps-script-for-efficient-content-workflows/</link>
      <pubDate>Fri, 26 Apr 2024 15:15:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/26/batch-processing-powerhouse-leverage-gemini-1.5-api-and-google-apps-script-for-efficient-content-workflows/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f3dbba02a620cfd7a729e13b012ea66f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240426a/fig1.jpg&#34;&#xA;     alt=&#34;Batch Processing Powerhouse: Leverage Gemini 1.5 API and Google Apps Script for Efficient Content Workflows&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;A new Google Apps Script library, &amp;ldquo;GeminiWithFiles&amp;rdquo;, simplifies using the powerful Gemini 1.5 AI model. It lets users directly upload files for content generation or create descriptions for many images at once, making it much faster than prior methods. This is helpful for tasks involving large amounts of text or images.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Recently, Gemini, a family of Google&amp;rsquo;s most capable AI models, has revolutionized various tasks by allowing unstructured data to be used as structured data. This breakthrough is particularly impactful for tasks involving large amounts of text or images.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RichTextAssistant</title>
      <link>https://tanaikech.github.io/2024/04/22/updated-gas-library-richtextassistant/</link>
      <pubDate>Mon, 22 Apr 2024 08:47:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/22/updated-gas-library-richtextassistant/</guid>
      <description>&lt;h2 id=&#34;richtextassistant-was-updated-to-v101&#34;&gt;RichTextAssistant was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (April 22, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From &lt;a href=&#34;https://github.com/tanaikech/RichTextAssistant/issues/1&#34;&gt;oshliaer&amp;rsquo;s report&lt;/a&gt;, a bug was removed. In the current stage, when RichTextValueBuilder is used, it seems that when &lt;code&gt;setTextStyle&lt;/code&gt; is used after &lt;code&gt;setLinkUrl&lt;/code&gt;, the style of the hyperlink is removed while the link is kept. So, it is required to set &lt;code&gt;setLinkUrl&lt;/code&gt; after &lt;code&gt;setTextStyle&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RichTextAssistant&#34;&gt;https://github.com/tanaikech/RichTextAssistant&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2024/04/16/updated-gas-library-utlapp/</link>
      <pubDate>Tue, 16 Apr 2024 15:38:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/16/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v105&#34;&gt;UtlApp was updated to v1.0.5.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.5 (April 16, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Methods of &lt;a href=&#34;https://github.com/tanaikech/UtlApp?tab=readme-ov-file#consolidatea1notations&#34;&gt;consolidateA1Notations&lt;/a&gt; was added. When this method is used, the scattered A1Notations can be consolidated.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Consolidate Scattered A1Notations into Continuous Ranges on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/04/16/consolidate-scattered-a1notations-into-continuous-ranges-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Tue, 16 Apr 2024 15:35:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/16/consolidate-scattered-a1notations-into-continuous-ranges-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1241411538d5b4d90e23a8c5f30d0ea6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240416a/fig1.jpg&#34;&#xA;     alt=&#34;Consolidate Scattered A1Notations into Continuous Ranges on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Consolidate scattered cell references (A1Notation) in Google Sheets for efficiency. This script helps select cells by background color or update values/formats, overcoming limitations of large range lists.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;When working with Google Spreadsheets, there might be a scenario where you need to process scattered A1Notations (cell addresses in the format &amp;ldquo;A1&amp;rdquo;). This could involve selecting cells with specific background colors, updating cell values, or modifying cell formats.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2024/04/13/updated-gas-library-utlapp/</link>
      <pubDate>Sat, 13 Apr 2024 10:10:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/13/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v104&#34;&gt;UtlApp was updated to v1.0.4.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.4 (April 13, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Updated the methods of &lt;a href=&#34;https://github.com/tanaikech/UtlApp#convgridrangetoa1Notation&#34;&gt;convGridRangeToA1Notation&lt;/a&gt;. When the sheet name is not given, only the A1Notation is returned.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Specifying Output Types for Gemini API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/04/10/specifying-output-types-for-gemini-api-with-google-apps-script/</link>
      <pubDate>Wed, 10 Apr 2024 14:35:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/10/specifying-output-types-for-gemini-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f7e627a286058229aeaaed776743564d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240410b/fig1.jpg&#34;&#xA;     alt=&#34;Specifying Output Types for Gemini API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API generates different outputs depending on the prompts. This report explains how to use function calling in the new Gemini 1.5 API to control the output format (string, number, etc.) within a script during a chat session. This allows for more flexibility in using the Gemini API&amp;rsquo;s results.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The appearance of Gemini has already brought a wave of innovation to various fields. When the Gemini API returns a response, the format of the response is highly dependent on the input text provided as a prompt. For instance, to retrieve the output value as a JSON object, you need to explicitly include a prompt like &amp;ldquo;Return JSON&amp;rdquo; within your input. However, there can be situations where the API doesn&amp;rsquo;t return the data in the desired format.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Identifying Colored Cell Regions in Google Sheets with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/04/10/identifying-colored-cell-regions-in-google-sheets-with-google-apps-script/</link>
      <pubDate>Wed, 10 Apr 2024 10:13:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/10/identifying-colored-cell-regions-in-google-sheets-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/15198f6c6872385b4ed6e85498b82733&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240410a/fig1.gif&#34;&#xA;     alt=&#34;Identifying Colored Cell Regions in Google Sheets with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This Google Apps Script helps identify and analyze regions of colored cells in a Google Sheet.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Recently, I encountered a situation where I needed to identify colored cell regions in Google Sheets. For instance, consider the following spreadsheet:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240410a/fig2.png&#34;&#xA;     alt=&#34;Identifying Colored Cell Regions in Google Sheets with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;The region enclosed by the red cells (B2:D4) is a rectangle. In this case, the closed region can be easily identified using a simple script in Google Sheets. However, the region enclosed by the blue cells (H3, I2, J2,,,) is more complex. It consists of multiple disconnected cells that form a single shape. Identifying such irregular shapes using a script can be challenging.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parsing Invoices using Gemini 1.5 API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/04/03/parsing-invoices-using-gemini-1.5-api-with-google-apps-script/</link>
      <pubDate>Wed, 03 Apr 2024 11:59:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/03/parsing-invoices-using-gemini-1.5-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/165a6a76244a81312f9d398e88c4730d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240403a/fig1.png&#34;&#xA;     alt=&#34;Parsing Invoices using Gemini 1.5 API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report explores using Gemini, a new AI model, to parse invoices in Gmail attachments. Traditional text searching proved unreliable due to invoice format variations. Gemini&amp;rsquo;s capabilities can potentially overcome this inconsistency and improve invoice data extraction.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;After Gemini, a large language model from Google AI, has been released, it has the potential to be used for modifying various situations, including information extraction from documents. In my specific case, I work with invoices in PDF format. Until now, I relied on the direct search by a Google Apps Script to achieve this task. The script&amp;rsquo;s process involved:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Convert Soft Breaks to Hard Breaks on Google Documents using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/04/02/convert-soft-breaks-to-hard-breaks-on-google-documents-using-google-apps-script/</link>
      <pubDate>Tue, 02 Apr 2024 14:59:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/02/convert-soft-breaks-to-hard-breaks-on-google-documents-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7de3ed734ac9b103631c3a20452dca74&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;This script converts soft breaks to hard breaks in a Google Document using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;Follow these steps:&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-create-a-new-google-document&#34;&gt;1. Create a New Google Document&lt;/h3&gt;&#xA;&lt;p&gt;Create a new Google Document and open it.&#xA;Go to &amp;ldquo;View&amp;rdquo; -&amp;gt; &amp;ldquo;Show non-printing characters&amp;rdquo; in the top menu to see line breaks in the document body (as shown in the image below).&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-sample-script&#34;&gt;2. Sample Script&lt;/h3&gt;&#xA;&lt;p&gt;Copy and paste the following script into the script editor of your Google Document.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technique for Appending Values to Specific Columns on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/04/01/technique-for-appending-values-to-specific-columns-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 01 Apr 2024 14:17:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/04/01/technique-for-appending-values-to-specific-columns-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/434bef051c136bc87e724b033a478bd2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240401a/fig1.png&#34;&#xA;     alt=&#34;Technique for Appending Values to Specific Columns on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report addresses the challenge of appending values to specific columns in Google Sheets when columns have uneven last rows. It offers a Google Apps Script solution with a sample script and demonstration image, enabling efficient and flexible data manipulation.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script is a versatile tool that allows for seamless management of various Google Workspace applications, including Docs, Sheets, Slides, Forms, and APIs. Its ability to automate tasks within Google Sheets is particularly powerful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Analyzing Trends of Google Apps Script from Questions on Stackoverflow using Gemini 1.5 API</title>
      <link>https://tanaikech.github.io/2024/03/30/analyzing-trends-of-google-apps-script-from-questions-on-stackoverflow-using-gemini-1.5-api/</link>
      <pubDate>Sat, 30 Mar 2024 14:28:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/30/analyzing-trends-of-google-apps-script-from-questions-on-stackoverflow-using-gemini-1.5-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8621c3b799685fd2db1204d1372e1d73&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240330b/fig1.png&#34;&#xA;     alt=&#34;Analyzing Trends of Google Apps Script from Questions on Stackoverflow using Gemini 1.5 API&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;A new large language model (LLM) called Gemini with an API is now available, allowing developers to analyze vast amounts of data. This report explores trends in Google Apps Script by using the Gemini 1.5 API to analyze questions on Stack Overflow.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The release of the LLM model Gemini as an API on Vertex AI and Google AI Studio has opened a world of possibilities. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; The Gemini API significantly expands the potential of various scripting languages, paving the way for diverse applications. Additionally, Gemini 1.5 has recently been released in AI Studio. &lt;a href=&#34;https://blog.google/technology/ai/google-gemini-next-generation-model-february-2024/#sundar-note&#34;&gt;Ref&lt;/a&gt; We can expect the Gemini 1.5 API to follow suit soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generating Texts using Files Uploaded by Gemini 1.5 API</title>
      <link>https://tanaikech.github.io/2024/03/30/generating-texts-using-files-uploaded-by-gemini-1.5-api/</link>
      <pubDate>Sat, 30 Mar 2024 11:30:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/30/generating-texts-using-files-uploaded-by-gemini-1.5-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0ad317503e3a066d715430e7e875abfb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240330a/fig1.png&#34;&#xA;     alt=&#34;Generating Texts using Files Uploaded by Gemini 1.5 API&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API allows the generating of text from uploaded files using Google Apps Script. It expands the potential of various scripting languages for diverse applications.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;With the release of the LLM model Gemini as an API on Vertex AI and Google AI Studio, a world of possibilities has opened up. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; The Gemini API significantly expands the potential of various scripting languages and paves the way for diverse applications. Also, recently, Gemini 1.5 in AI Studio has been released. &lt;a href=&#34;https://blog.google/technology/ai/google-gemini-next-generation-model-february-2024/#sundar-note&#34;&gt;Ref&lt;/a&gt; In the near future, Gemini 1.5 API will be also released soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crafting Bespoke Output Formats with Gemini API</title>
      <link>https://tanaikech.github.io/2024/03/25/crafting-bespoke-output-formats-with-gemini-api/</link>
      <pubDate>Mon, 25 Mar 2024 10:54:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/25/crafting-bespoke-output-formats-with-gemini-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3a659a87673e3e582c880934c8f19e01&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240325a/fig1.png&#34;&#xA;     alt=&#34;Crafting Bespoke Output Formats with Gemini API&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API unlocks potential for diverse applications but requires consistent output formatting. This report proposes a method using question phrasing and API calls to craft a bespoke output, enabling seamless integration with user applications. Examples include data categorization and obtaining multiple response options.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;With the release of the LLM model Gemini as an API on Vertex AI and Google AI Studio, a world of possibilities has opened up. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; The Gemini API significantly expands the potential of various scripting languages and paves the way for diverse applications. However, leveraging the Gemini API smoothly requires consistent output formatting, which can be tricky due to its dependence on the specific question asked.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Attempting Reverse Engineering with Gemini API and Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/03/21/attempting-reverse-engineering-with-gemini-api-and-google-apps-script/</link>
      <pubDate>Thu, 21 Mar 2024 15:43:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/21/attempting-reverse-engineering-with-gemini-api-and-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b0cab68b99137de21339d717d8ea1b25&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Gemini API on Vertex AI/Studio unlocks new applications with data retrieval and content generation through function calls. This report explores using the API for reverse engineering with a sample interpreter in Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The recent release of the LLM model Gemini as an API on Vertex AI and Google AI Studio unlocks a vast potential for new applications and methodologies. It significantly expands capabilities across diverse situations, paving the way for groundbreaking applications. Notably, the Gemini API allows data retrieval and content generation through function calls. In my recent report, &amp;ldquo;&lt;a href=&#34;https://medium.com/google-cloud/guide-to-function-calling-with-gemini-and-google-apps-script-0e058d472f45&#34;&gt;Guide to Function Calling with Gemini and Google Apps Script&lt;/a&gt;&amp;rdquo;, I explore function calls as a launchpad for various applications. This report showcases reverse engineering using the Gemini API, with a sample interpreter for creating sample values from a given regex using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Copying Sheet Including Charts from Google Spreadsheet to Another Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/03/15/copying-sheet-including-charts-from-google-spreadsheet-to-another-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 15 Mar 2024 20:52:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/15/copying-sheet-including-charts-from-google-spreadsheet-to-another-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/63f59cee0f2c0c8f24e418ca6b3f868b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report presents a workaround for copying a sheet, including its charts, from Google Spreadsheet &amp;ldquo;A&amp;rdquo; to Google Spreadsheet &amp;ldquo;B&amp;rdquo; using Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;In this report, I would like to introduce a workaround for the following goal:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Copying a sheet including charts from Google Spreadsheet &amp;ldquo;A&amp;rdquo; to Google Spreadsheet &amp;ldquo;B&amp;rdquo; using a script.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In general, when Sheets API is used, all objects of the Spreadsheet can be copied easily. However, when I tested this, I noticed the following problems:&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - GoogleApiApp</title>
      <link>https://tanaikech.github.io/2024/03/14/gas-library-googleapiapp/</link>
      <pubDate>Thu, 14 Mar 2024 14:40:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/14/gas-library-googleapiapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for supporting to use Google APIs with Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;description&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;There are numerous powerful Google APIs available today. Google Apps Script streamlines interacting with these APIs through a simplified authorization process. Additionally, advanced Google services integrate seamlessly with Apps Script, making Google APIs highly advantageous for users.&lt;/p&gt;&#xA;&lt;p&gt;However, utilizing APIs beyond advanced Google services can be challenging for some users. Developing a simpler method for using various Google APIs would significantly increase their accessibility and empower a broader range of users to create diverse applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Empowering Everyone to Leverage Various Google APIs using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/03/14/empowering-everyone-to-leverage-various-google-apis-using-google-apps-script/</link>
      <pubDate>Thu, 14 Mar 2024 14:04:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/14/empowering-everyone-to-leverage-various-google-apis-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/88c180fa4bb35b74b73203f754db2d3c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240314a/fig1.png&#34;&#xA;     alt=&#34;Empowering Everyone to Leverage Various Google APIs using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Google offers powerful APIs but using them (except advanced services) can be complex. A new, simpler method would benefit developers creating diverse applications. To address this, I built a Google Apps Script library simplifying API access.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;There are numerous powerful Google APIs available today. Google Apps Script streamlines interacting with these APIs through a simplified authorization process. Additionally, advanced Google services integrate seamlessly with Apps Script, making Google APIs highly advantageous for users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2024/03/11/updated-gas-library-onedriveapp/</link>
      <pubDate>Mon, 11 Mar 2024 11:44:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/11/updated-gas-library-onedriveapp/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.3 (March 11, 2024)&lt;/p&gt;&#xA;&lt;p&gt;Modified the URL of the application installed in Microsoft Azure.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;GitHub of OnedriveApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v205</title>
      <link>https://tanaikech.github.io/2024/03/10/updated-goodls-to-v205/</link>
      <pubDate>Sun, 10 Mar 2024 17:13:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/10/updated-goodls-to-v205/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.5 (March 10, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From this version, when the API key is used, the large file is downloaded by the API key. Because the specification for downloading the shared large file is sometimes changed. When the API key is not used, the shared large file is downloaded by the current specification (v2.0.4). If the shared large file cannot be downloaded by the change of the specification on Google&amp;rsquo;s side, please use the API key and test it again. The usage of goodls has not changed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v204</title>
      <link>https://tanaikech.github.io/2024/03/09/updated-goodls-to-v204/</link>
      <pubDate>Sat, 09 Mar 2024 17:08:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/09/updated-goodls-to-v204/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.4 (March 9, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From January 2024, it seems that the specification of the process for downloading a large shared file on Google Drive has been changed. So I updated goodls to reflect this. The usage of goodls has not changed. In the current stage, when a large share file is downloaded, it is required to click the following button.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;download-form&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://drive.usercontent.google.com/download&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;get&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;uc-download-link&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;goog-inline-block jfk-button jfk-button-action&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;このままダウンロード&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fileId&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;export&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;download&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;authuser&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;confirm&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;t&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;uuid&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;uuId&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;at&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;some value&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this version, the URL obtained by this click is created, and the created URL is used for downloading it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enhanced Search using Gemini API</title>
      <link>https://tanaikech.github.io/2024/03/06/enhanced-search-using-gemini-api/</link>
      <pubDate>Wed, 06 Mar 2024 15:24:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/06/enhanced-search-using-gemini-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/70c28ddff49e8a0cf474f7f48d996b8a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240306a/fig1.png&#34;&#xA;     alt=&#34;Enhanced Search using Gemini API&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API can now do semantic searches, going beyond content generation. This means it can understand the meaning of your search and provide better results, even if your words don&amp;rsquo;t exactly match the data. This report introduces the enhanced search capabilities of the Gemini API.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API expands its potential beyond content generation to encompass powerful semantic search capabilities. Searching existing data is crucial in various situations. However, before the introduction of generative AI, traditional search methods relied solely on keyword matching. Recent advancements in semantic search have introduced similarity search, allowing for a more nuanced understanding of queries. Combining this with the generative power of the Gemini API can significantly enhance the search results of existing data. This report explores the possibilities of enhanced search using the Gemini API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - CorporaApp</title>
      <link>https://tanaikech.github.io/2024/03/06/updated-gas-library-corporaapp/</link>
      <pubDate>Wed, 06 Mar 2024 12:09:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/06/updated-gas-library-corporaapp/</guid>
      <description>&lt;h2 id=&#34;corporaapp-was-updated-to-v103&#34;&gt;CorporaApp was updated to v1.0.3.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (March 6, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;New method of &lt;a href=&#34;https://github.com/tanaikech/CorporaApp?tab=readme-ov-file#getchunk&#34;&gt;getChunk&lt;/a&gt; was added. When this method is used, you can retrieve a single chunk using the resource name of chunk.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/CorporaApp&#34;&gt;https://github.com/tanaikech/CorporaApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technique for Protecting Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/03/03/technique-for-protecting-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Sun, 03 Mar 2024 16:58:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/03/03/technique-for-protecting-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3f207ffee7bf64fa79c99118e2979e55&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240303a/fig1.png&#34;&#xA;     alt=&#34;Technique for Protecting Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script automates tasks like managing protections in Google Spreadsheets. These protections control user access to specific cells. While scripts exist for this purpose, users still encounter challenges, prompting this report. The report aims to introduce techniques for managing protections using sample scripts, helping users understand and implement this functionality.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script is a powerful tool that enables seamless management of Google Documents, Spreadsheets, Slides, Forms, APIs, and more. It is particularly effective for automating tasks within Google Spreadsheets. Google Spreadsheets offer cell protection capabilities, allowing you to define editable areas for different collaborators. Google Apps Script can effectively manage these protections. While online resources like Stack Overflow often feature questions related to spreadsheet protection, this report aims to introduce practical techniques through sample scripts. This will help users understand how to manage Google Spreadsheet protections using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Similarity Viewer using Gemini API with Google Spreadsheet and Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/02/29/similarity-viewer-using-gemini-api-with-google-spreadsheet-and-google-apps-script/</link>
      <pubDate>Thu, 29 Feb 2024 11:22:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/29/similarity-viewer-using-gemini-api-with-google-spreadsheet-and-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6a7afe7b145170265ee3cb2d6cb4be58&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240229a/fig1.gif&#34;&#xA;     alt=&#34;Similarity Viewer using Gemini API with Google Spreadsheet and Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API enables both content generation and semantic search, managing data effectively. This report introduces a Gemini-powered similarity viewer for easy visualization of complex text similarity scores, using Google Spreadsheet and Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The Gemini API unlocks new possibilities, extending its capabilities beyond content generation to encompass semantic search. Within this context, the API excels at efficiently managing data within corpora. While semantic search provides valuable similarity scores (chunkRelevanceScore) for text pairs, interpreting these numerical values can be cumbersome. This report addresses this challenge by introducing a novel similarity viewer, built upon the powerful trio of Gemini API, Google Spreadsheet, and Google Apps Script. This user-friendly tool allows us to visually represent the similarity of texts, transforming numerical data into an intuitive and easily digestible format.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - CorporaApp</title>
      <link>https://tanaikech.github.io/2024/02/26/updated-gas-library-corporaapp/</link>
      <pubDate>Mon, 26 Feb 2024 10:23:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/26/updated-gas-library-corporaapp/</guid>
      <description>&lt;h2 id=&#34;corporaapp-was-updated-to-v102&#34;&gt;CorporaApp was updated to v1.0.2.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (February 26, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;New method of &lt;a href=&#34;https://github.com/tanaikech/CorporaApp?tab=readme-ov-file#setaccesstoken&#34;&gt;setAccessToken&lt;/a&gt; was added. When this method is used, you can use the access token retrieved from the service account. Default access token is retrieved by &lt;code&gt;ScriptApp.getOAuthToken()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/CorporaApp&#34;&gt;https://github.com/tanaikech/CorporaApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Allowing Access by IMPORTHTML, IMPORTDATA, IMPORTFEED, IMPORTXML, and IMPORTRANGE on Google Spreadsheet with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/02/25/allowing-access-by-importhtml-importdata-importfeed-importxml-and-importrange-on-google-spreadsheet-with-google-apps-script/</link>
      <pubDate>Sun, 25 Feb 2024 14:00:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/25/allowing-access-by-importhtml-importdata-importfeed-importxml-and-importrange-on-google-spreadsheet-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/627d86bdea4028c301431443f82f0ac1&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240225a/fig1.png&#34;&#xA;     alt=&#34;Allowing Access by IMPORTHTML, IMPORTDATA, IMPORTFEED, IMPORTXML, and IMPORTRANGE on Google Spreadsheet with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;updated-on-april-26&#34;&gt;Updated on April 26&lt;/h1&gt;&#xA;&lt;p&gt;From &lt;a href=&#34;https://twitter.com/max__makhrov/status/1783479745146994728&#34;&gt;this X&lt;/a&gt; and &lt;a href=&#34;https://justin.poehnelt.com/posts/sheets-api-import-image-external-url/&#34;&gt;this blog&lt;/a&gt;, it seems that in the current stage, this situation can be resolved using Sheets API. The sample script of Google Apps Script is as follows. Before you test this, please enable Sheets API at Advanced Google services.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your Spreadsheet ID.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;spreadsheetId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;requests&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;updateSpreadsheetProperties&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;properties&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;importFunctionsExternalUrlAccessAllowed&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;fields&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;importFunctionsExternalUrlAccessAllowed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Spreadsheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;batchUpdate&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;requests&lt;/span&gt; }, &lt;span style=&#34;color:#a6e22e&#34;&gt;spreadsheetId&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As additional information, in this case, when &lt;code&gt;importFunctionsExternalUrlAccessAllowed: true&lt;/code&gt; is modified to &lt;code&gt;importFunctionsExternalUrlAccessAllowed: false&lt;/code&gt;, an error like &lt;code&gt;Cannot set import functions external URL access allowed from true to false.&lt;/code&gt; occurs. It seems that when access is allowed once, this cannot be canceled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Image Bot using Gemini with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/02/22/creating-image-bot-using-gemini-with-google-apps-script/</link>
      <pubDate>Thu, 22 Feb 2024 12:06:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/22/creating-image-bot-using-gemini-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cf29216cf4b1c127d9213db6079894c7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;New Gemini API opens doors for developers to integrate its AI power into apps, potentially impacting education, healthcare, and business. The latest Gemini 1.5 brings even more features. This report showcases an image bot using Gemini as one example of its diverse applications. Showcasing its diverse application potential across various fields.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The recent release of Gemini as an accessible API on Vertex AI and Google AI Studio empowers developers to integrate its vast capabilities into their applications, potentially revolutionizing fields like education, healthcare, and business. Adding even more powerful features with the recently announced Gemini 1.5, this tool promises even greater impact. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://blog.google/technology/ai/google-gemini-next-generation-model-february-2024/&#34;&gt;Ref&lt;/a&gt; I believe Gemini significantly expands the potential for diverse applications across various fields. To showcase its potential, this report introduces an image bot using Gemini with Google Apps Script and Google Drive. This is just one example of the many compelling use cases developers can build with Gemini.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Guide to Function Calling with Gemini and Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/02/18/guide-to-function-calling-with-gemini-and-google-apps-script/</link>
      <pubDate>Sun, 18 Feb 2024 14:22:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/18/guide-to-function-calling-with-gemini-and-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/061cca4b9af67abe8c4244c03750ea30&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Powerful AI tool Gemini&amp;rsquo;s API release (Vertex AI &amp;amp; Google AI Studio) opens doors for diverse applications. Its recent upgrade to version 1.5 boosts capabilities. This report demonstrates using simple Google Apps Script function calls to leverage Gemini&amp;rsquo;s power for both data retrieval and content generation.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The recent release of the LLM model Gemini as an API on Vertex AI and Google AI Studio unlocks a world of possibilities. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; Excitingly, Gemini 1.5 was just announced, further expanding its capabilities. &lt;a href=&#34;https://blog.google/technology/ai/google-gemini-next-generation-model-february-2024/&#34;&gt;Ref&lt;/a&gt; I believe Gemini significantly expands the potential in various situations and paves the way for diverse applications. Notably, the Gemini API can retrieve new data and generate content through function calls. In this report, I introduce the basic flow of function calling in the Gemini API using a simple Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - CorporaApp</title>
      <link>https://tanaikech.github.io/2024/02/16/updated-gas-library-corporaapp/</link>
      <pubDate>Fri, 16 Feb 2024 17:49:44 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/16/updated-gas-library-corporaapp/</guid>
      <description>&lt;h2 id=&#34;corporaapp-was-updated-to-v101&#34;&gt;CorporaApp was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (February 16, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;New method of &lt;a href=&#34;https://github.com/tanaikech/CorporaApp?tab=readme-ov-file#searchquerywithgenerateanswer&#34;&gt;searchQueryWithGenerateAnswer&lt;/a&gt; was added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/CorporaApp&#34;&gt;https://github.com/tanaikech/CorporaApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Applying Gemini Pro API to Flexible Templates using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/02/07/applying-gemini-pro-api-to-flexible-templates-using-google-apps-script/</link>
      <pubDate>Wed, 07 Feb 2024 16:57:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/07/applying-gemini-pro-api-to-flexible-templates-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ad5bd7eee50c2b9f05995d56679610f7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240207a/fig1.png&#34;&#xA;     alt=&#34;Applying Gemini Pro API to Flexible Templates using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;New &amp;ldquo;semantic search&amp;rdquo; features in Gemini API help find desired information within its corpora. While using these features with Google Apps Script was complex, a new library simplifies the process. This report proposes using this library with Gemini-generated content to automate template processes in Google Docs and Slides, creating a more flexible workflow.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The semantic search opens up a new wind for finding the expected values. Recently, the APIs for managing corpora have been added to Gemini API. &lt;a href=&#34;https://ai.google.dev/api/rest&#34;&gt;Ref&lt;/a&gt; When the corpora of Gemini API is used, the semantic search can be effectively achieved. &lt;a href=&#34;https://medium.com/google-cloud/semantic-search-using-corpus-of-gemini-api-with-google-apps-script-9ba3c111139a&#34;&gt;Ref&lt;/a&gt; However, when the corpora are tried to be used with Google Apps Script, the script is complicated cumbersome. To address this challenge, I have created a library for managing the corpora using Google Apps Script. &lt;a href=&#34;https://github.com/tanaikech/CorporaApp&#34;&gt;Ref&lt;/a&gt; With this library, managing corpora becomes effortless, requiring only straightforward scripts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Convert Contact URL to Resource Name for People API using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/02/06/convert-contact-url-to-resource-name-for-people-api-using-google-apps-script/</link>
      <pubDate>Tue, 06 Feb 2024 11:31:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/06/convert-contact-url-to-resource-name-for-people-api-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/41e71610f03617e131183faac5cf9ad7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240206a/fig1.png&#34;&#xA;     alt=&#34;Convert Contact URL to Resource Name for People API using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting a contact URL of &amp;ldquo;person/c###&amp;rdquo; to a resource name &amp;ldquo;people/c###&amp;rdquo; for People API using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When you open each contact at &lt;a href=&#34;https://contacts.google.com/&#34;&gt;Contacts&lt;/a&gt; with your browser, you can see the URL like &lt;code&gt;https://contacts.google.com/person/c###################&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here, you might have a situation where you are required to retrieve the resource name for People API from this URL. But, in the current stage, &lt;code&gt;person/c###################&lt;/code&gt; cannot be directly used as the resource name &lt;code&gt;people/c###################&lt;/code&gt;. In this report, I would like to introduce a sample script for converting from &lt;code&gt;person/c###################&lt;/code&gt; to &lt;code&gt;people/c###################&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - PDFApp</title>
      <link>https://tanaikech.github.io/2024/02/05/updated-gas-library-pdfapp/</link>
      <pubDate>Mon, 05 Feb 2024 16:53:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/05/updated-gas-library-pdfapp/</guid>
      <description>&lt;h2 id=&#34;pdfapp-was-updated-to-v105&#34;&gt;PDFApp was updated to v1.0.5.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.5 (February 5, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A new method of &amp;ldquo;splitPDF&amp;rdquo; was added. &lt;a href=&#34;https://github.com/tanaikech/PDFApp?tab=readme-ov-file#splitpdf&#34;&gt;Ref&lt;/a&gt; This method splits each page of a PDF to an individual PDF file.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/PDFApp&#34;&gt;https://github.com/tanaikech/PDFApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - PDFApp</title>
      <link>https://tanaikech.github.io/2024/02/05/updated-gas-library-pdfapp/</link>
      <pubDate>Mon, 05 Feb 2024 16:13:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/05/updated-gas-library-pdfapp/</guid>
      <description>&lt;h2 id=&#34;pdfapp-was-updated-to-v104&#34;&gt;PDFApp was updated to v1.0.4.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.4 (February 5, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From &lt;a href=&#34;https://github.com/Hopding/pdf-lib/issues/252&#34;&gt;this discussion&lt;/a&gt;, I changed the logic of &lt;code&gt;copyPages&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/PDFApp&#34;&gt;https://github.com/tanaikech/PDFApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2024/02/05/updated-gas-library-utlapp/</link>
      <pubDate>Mon, 05 Feb 2024 09:27:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/02/05/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v103&#34;&gt;UtlApp was updated to v1.0.3.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (February 5, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Methods of &lt;a href=&#34;https://github.com/tanaikech/UtlApp?tab=readme-ov-file#addqueryparameters&#34;&gt;addQueryParameters&lt;/a&gt; was updated.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Semantic Search using Corpus of Gemini API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/01/31/semantic-search-using-corpus-of-gemini-api-with-google-apps-script/</link>
      <pubDate>Wed, 31 Jan 2024 10:54:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/01/31/semantic-search-using-corpus-of-gemini-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/02415a0056099229525f894ae59dacb5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240125a/fig1.png&#34;&#xA;     alt=&#34;Semantic Search using Corpus of Gemini API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;In the current stage, v1beta of Gemini API can use the corpora. &lt;a href=&#34;https://ai.google.dev/api/rest/v1beta/corpora&#34;&gt;Ref&lt;/a&gt; When the corpora are used, the values can be searched with the semantic search. In the current stage, 5 corpora can be created in a single project. And, each corpus can have 10,000 documents and 1,000,000 chunks. In this report, I would like to introduce a method for achieving the semantic search using the corpora with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - DocsServiceApp</title>
      <link>https://tanaikech.github.io/2024/01/30/updated-gas-library-docsserviceapp/</link>
      <pubDate>Tue, 30 Jan 2024 20:41:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/01/30/updated-gas-library-docsserviceapp/</guid>
      <description>&lt;h2 id=&#34;docsserviceapp-was-updated-to-v122&#34;&gt;DocsServiceApp was updated to v1.2.2&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.2 (January 30, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Remove a bug in &lt;code&gt;ExcelApp&lt;/code&gt;. When the inserted image had no data, an error occurred. This issue was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp&#34;&gt;https://github.com/tanaikech/DocsServiceApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flexible Labeling for Gmail using Gemini Pro API with Google Apps Script Part 2</title>
      <link>https://tanaikech.github.io/2024/01/30/flexible-labeling-for-gmail-using-gemini-pro-api-with-google-apps-script-part-2/</link>
      <pubDate>Tue, 30 Jan 2024 11:51:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/01/30/flexible-labeling-for-gmail-using-gemini-pro-api-with-google-apps-script-part-2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/811e5c92cf96e8b387ffa9f29da08ec3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231219a/fig1.png&#34;&#xA;     alt=&#34;Flexible Labeling for Gmail using Gemini Pro API with Google Apps Script Part 2&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;I have published &amp;ldquo;&lt;a href=&#34;https://gist.github.com/tanaikech/cdfa63b670b223e482e457703b9cdeb6&#34;&gt;Flexible Labeling for Gmail using Gemini Pro API with Google Apps Script&lt;/a&gt;&amp;rdquo; on December 19, 2023. Today, I published &amp;ldquo;&lt;a href=&#34;https://gist.github.com/tanaikech/28061e3d5404b4fba23368bbae4611d2&#34;&gt;Categorization using Gemini Pro API with Google Apps Script&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;In this report, as part 2, I would like to introduce 2 sample scripts for flexible labeling for Gmail using the semantic search and the function calling of Gemini Pro API with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Categorization using Gemini Pro API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/01/30/categorization-using-gemini-pro-api-with-google-apps-script/</link>
      <pubDate>Tue, 30 Jan 2024 11:47:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/01/30/categorization-using-gemini-pro-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/28061e3d5404b4fba23368bbae4611d2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240130a/fig1.png&#34;&#xA;     alt=&#34;Categorization using Gemini Pro API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report explores using the Gemini Pro API with Google Apps Script to achieve flexible data categorization.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The recent release of the LLM model Gemini as an API on Vertex AI and Google AI Studio opens a world of possibilities. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://blog.google/technology/ai/google-gemini-ai/#sundar-note&#34;&gt;Ref&lt;/a&gt; I believe Gemini API significantly expands the potential of Google Apps Script and paves the way for diverse applications. In this report, I present the flexible categorization of data using Gemini Pro API with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2024/01/25/updated-gas-library-utlapp/</link>
      <pubDate>Thu, 25 Jan 2024 13:59:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/01/25/updated-gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;utlapp-was-updated-to-v102&#34;&gt;UtlApp was updated to v1.0.2.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (January 25, 2024)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;2 methods of &lt;a href=&#34;https://github.com/tanaikech/UtlApp?tab=readme-ov-file#dotproduct&#34;&gt;dotProduct&lt;/a&gt; and &lt;a href=&#34;https://github.com/tanaikech/UtlApp?tab=readme-ov-file#cosinesimilarity&#34;&gt;cosineSimilarity&lt;/a&gt; were added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/UtlApp&#34;&gt;https://github.com/tanaikech/UtlApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Semantic Search using Gemini Pro API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/01/25/semantic-search-using-gemini-pro-api-with-google-apps-script/</link>
      <pubDate>Thu, 25 Jan 2024 12:17:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/01/25/semantic-search-using-gemini-pro-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c6556dc08ae3dcb013d8909c1f42b16d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240125a/fig1.png&#34;&#xA;     alt=&#34;Semantic Search using Gemini Pro API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Gemini API unlocks semantic search for Google Apps Script, boosting its power beyond automation. This report explores the result of attempting the semantic search using Gemini Pro API with Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;The recent release of the LLM model Gemini as an API on Vertex AI and Google AI Studio opens a world of possibilities. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://blog.google/technology/ai/google-gemini-ai/#sundar-note&#34;&gt;Ref&lt;/a&gt; I believe Gemini API significantly expands the potential of Google Apps Script and paves the way for diverse applications. In this report, I present a result for attempting the semantic search using Gemini Pro API with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Dining Reservation System using Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/01/22/creating-dining-reservation-system-using-google-apps-script/</link>
      <pubDate>Mon, 22 Jan 2024 10:53:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/01/22/creating-dining-reservation-system-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/40bbb051c1dfab4dce373e88c702b053&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240122a/fig1.png&#34;&#xA;     alt=&#34;Creating Dining Reservation System using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script automates tasks (even offline) and builds web apps using spreadsheets as databases. This report presents a basic dining reservation system to illustrate key aspects of web app development with Apps Script, HTML, and Javascript.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script is one of the powerful automation tools for achieving the automation process. When Google Apps Script can be used for the situation, even when users are away from their computers, automation can continue thanks to cloud computing. Also, Google Apps Script can manage Google Spreadsheet with Google Spreadsheet service and quickly deploy Web Apps with HTML and Javascript with minimal coding. &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet&#34;&gt;Ref1&lt;/a&gt; &lt;a href=&#34;https://developers.google.com/apps-script/guides/web&#34;&gt;Ref2&lt;/a&gt; When Google Spreadsheet is used as a database and the Web Apps are used as the user interface, various web applications can be created. In this report, in order to help understand the key aspects of building web applications with Google Apps Script, I would like to introduce a simple web application. Here, as a sample, the dining reservation system created by Google Apps Script, HTML, and Javascript is implemented as a web application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: How to Run Google Apps Script</title>
      <link>https://tanaikech.github.io/2024/01/12/report-how-to-run-google-apps-script/</link>
      <pubDate>Fri, 12 Jan 2024 11:15:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/01/12/report-how-to-run-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f03ab0d9eff7182a57e699fb3fbb32b8&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20240112a/fig1.png&#34;&#xA;     alt=&#34;Report: How to Run Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;Google Apps Script is one of the strong tools with cloud computing, and it is very useful for various situations. Google Apps Script can be run by various methods. This report introduces how to execute Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, generative AI has given a lot of new users a chance to use Google Apps Script. If this report helps the users develop applications using Google Apps Script, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trend of google-apps-script Tag on Stackoverflow 2024</title>
      <link>https://tanaikech.github.io/2024/01/06/trend-of-google-apps-script-tag-on-stackoverflow-2024/</link>
      <pubDate>Sat, 06 Jan 2024 14:21:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2024/01/06/trend-of-google-apps-script-tag-on-stackoverflow-2024/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7efec2c872fe2db57539a002d5d25875&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Published: January 6, 2024&lt;/p&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At Stackoverflow, a lot of people post questions and answers to the questions every day. There are various tags in Stackoverflow. A lot of discussions are performed at each tag. Their discussions bring important information and are very useful for a lot of people. As one of the tags, there is &amp;ldquo;google-apps-script&amp;rdquo;. I sometimes discuss the questions with that tag. When we see the discussions, we notice that the discussions have changed and progressed over time, because &amp;ldquo;Google Apps Script&amp;rdquo; which is the origin of the tag is updated. This report thinks this change is the trend of the tag of &amp;ldquo;google-apps-script&amp;rdquo;. This trend includes the number of questions, questioners, answerers, and tags added to the tag of &amp;ldquo;google-apps-script&amp;rdquo;. The trend of the tag of &amp;ldquo;google-apps-script&amp;rdquo; is deeply related to the progression of Google Apps Script and the various applications for Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use Microsoft Docs Files (Word, Excel, and PowerPoint) with Document Service, Spreadsheet Service, and Slides Service of Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/12/27/use-microsoft-docs-files-word-excel-and-powerpoint-with-document-service-spreadsheet-service-and-slides-service-of-google-apps-script/</link>
      <pubDate>Wed, 27 Dec 2023 09:53:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/12/27/use-microsoft-docs-files-word-excel-and-powerpoint-with-document-service-spreadsheet-service-and-slides-service-of-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/288b56aa47f4270f3b96d1421ea3eb36&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231226b/fig1.png&#34;&#xA;     alt=&#34;Use Microsoft Docs Files (Word, Excel, and PowerPoint) with Document Service, Spreadsheet Service, and Slides Service of Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Recently, Microsoft Docs files (Word, Excel, and PowerPoint files) could be manually edited by opening it on Google Drive using the browser. This is good news for a lot of users. With this situation, the URLs of Microsoft Docs files were changed. For example, when a Microsoft Word file (DOCX) is opened on Google Drive with the browser, the URL is &lt;code&gt;https://docs.google.com/document/d/###/edit&lt;/code&gt;. &lt;code&gt;###&lt;/code&gt; of this URL is the file ID of the DOCX file on Google Drive. This URL is the same as that of Google Document while the length of the file ID is different. From this situation, it might be guessed that the Document service of Google Apps Script might be able to be used for DOCX files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - MicrosoftDocsApp</title>
      <link>https://tanaikech.github.io/2023/12/27/gas-library-microsoftdocsapp/</link>
      <pubDate>Wed, 27 Dec 2023 09:49:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/12/27/gas-library-microsoftdocsapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for using Microsoft Docs files (Word, Excel, and PowerPoint files) using &lt;a href=&#34;https://developers.google.com/apps-script/reference/document&#34;&gt;Document service&lt;/a&gt;, &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet&#34;&gt;Spreadsheet service&lt;/a&gt;, and &lt;a href=&#34;https://developers.google.com/apps-script/reference/slides&#34;&gt;Slides Service&lt;/a&gt; of Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231226b/fig1.png&#34;&#xA;     alt=&#34;GAS Library - MicrosoftDocsApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Recently, Microsoft Docs files (Word, Excel, and PowerPoint files) could be manually edited by opening it on Google Drive using the browser. This is good news for a lot of users. With this situation, the URLs of Microsoft Docs files were changed. For example, when a Microsoft Word file (DOCX) is opened on Google Drive with the browser, the URL is &lt;code&gt;https://docs.google.com/document/d/###/edit&lt;/code&gt;. &lt;code&gt;###&lt;/code&gt; of this URL is the file ID of the DOCX file on Google Drive. This URL is the same as that of Google Document while the length of the file ID is different. From this situation, it might be guessed that the Document service of Google Apps Script might be able to be used for DOCX files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Returning Class Object of Google Apps Script with JSDoc</title>
      <link>https://tanaikech.github.io/2023/12/26/returning-class-object-of-google-apps-script-with-jsdoc/</link>
      <pubDate>Tue, 26 Dec 2023 13:49:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/12/26/returning-class-object-of-google-apps-script-with-jsdoc/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a42e060d0c049d981ea7a4a5e9da3892&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;On December 7, 2020, new IDE has been released. &lt;a href=&#34;https://developers.google.com/apps-script/docs/release-notes#December_07_2020&#34;&gt;Ref&lt;/a&gt; This has been helping users develop various applications using Google Apps Script with the new IDE very much. When it develops scripts and applications using Google Apps Script with the new IDE, it is considered that the existence of JSDoc in the script will be helpful for both the developers and the client users, because it is reflected in the auto-completion. However, when I tried to add the built-in Class objects of Google Apps Script for returning an object using JSDoc, unfortunately, I&amp;rsquo;m worried that the detailed official documents related to JSDoc for Google Apps Script are few. &lt;a href=&#34;https://developers.google.com/apps-script/guides/libraries#best_practices&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://developers.google.com/apps-script/guides/sheets/functions#autocomplete&#34;&gt;Ref&lt;/a&gt; In this report, I would like to introduce a method for adding JSDoc for using auto-completion of the built-in Class objects to functions of Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inserting Generated Text to Google Documents, Google Spreadsheets, and Google Slides using Gemini Pro API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/12/22/inserting-generated-text-to-google-documents-google-spreadsheets-and-google-slides-using-gemini-pro-api-with-google-apps-script/</link>
      <pubDate>Fri, 22 Dec 2023 15:14:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/12/22/inserting-generated-text-to-google-documents-google-spreadsheets-and-google-slides-using-gemini-pro-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f1a6042c62e207d22eb5a38140d8484e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When the generated text can be automatically inserted into the cursor position of Google Document, Google Spreadsheet, and Google Slide, it will be useful for users. This report introduces sample scripts for achieving this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-scripts&#34;&gt;Sample scripts&lt;/h2&gt;&#xA;&lt;p&gt;Here, I would like to introduce 3 sample scripts for a Google Document, a Google Spreadsheet, and a Google Slide.&lt;/p&gt;&#xA;&lt;h3 id=&#34;create-an-api-key&#34;&gt;Create an API key&lt;/h3&gt;&#xA;&lt;p&gt;These sample scripts request Gemini Pro API using an API key. So, please create your API key.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Expanding Error Messages of Google Apps Script using Gemini Pro API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/12/20/expanding-error-messages-of-google-apps-script-using-gemini-pro-api-with-google-apps-script/</link>
      <pubDate>Wed, 20 Dec 2023 08:25:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/12/20/expanding-error-messages-of-google-apps-script-using-gemini-pro-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b86db4d574474cbb079b185271f679ce&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231220a/fig1.gif&#34;&#xA;     alt=&#34;Expanding Error Messages of Google Apps Script using Gemini Pro API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;It is considered that when the current error message of Google Apps Script is expanded, it will be useful for a lot of users. This report introduces a sample script for expanding the error message of Google Apps Script using Gemini Pro API with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The recent release of the LLM model Gemini as an API on Vertex AI and Google AI Studio opens a world of possibilities. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://blog.google/technology/ai/google-gemini-ai/#sundar-note&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flexible Labeling for Gmail using Gemini Pro API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/12/19/flexible-labeling-for-gmail-using-gemini-pro-api-with-google-apps-script/</link>
      <pubDate>Tue, 19 Dec 2023 09:19:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/12/19/flexible-labeling-for-gmail-using-gemini-pro-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cdfa63b670b223e482e457703b9cdeb6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231219a/fig1.png&#34;&#xA;     alt=&#34;Flexible Labeling for Gmail using Gemini Pro API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;The release of Gemini API is expected to expand the future of Google Apps Script. This report introduces a sample script for flexible email labeling in Gmail using Gemini API with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The recent release of the LLM model Gemini as an API on Vertex AI and Google AI Studio opens a world of possibilities. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://blog.google/technology/ai/google-gemini-ai/#sundar-note&#34;&gt;Ref&lt;/a&gt; I believe Gemini API significantly expands the potential of Google Apps Script and paves the way for diverse applications. In this report, I present a sample script for flexible email labeling in Gmail using Gemini Pro API with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatically Creating Descriptions of Files on Google Drive using Gemini Pro API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/12/17/automatically-creating-descriptions-of-files-on-google-drive-using-gemini-pro-api-with-google-apps-script/</link>
      <pubDate>Sun, 17 Dec 2023 17:32:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/12/17/automatically-creating-descriptions-of-files-on-google-drive-using-gemini-pro-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/87dcf5a2ab90bbef983a140ec79f7396&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231217a/fig1.png&#34;&#xA;     alt=&#34;Automatically Creating Descriptions of Files on Google Drive using Gemini Pro API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Gemini LLM, now a Vertex AI/Studio API, unlocks easy document summarization and image analysis via Google Apps Script. This report details an example script for automatically creating the description of the files on Google Drive and highlights seamless integration options with API keys.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Recently, the LLM model Gemini has been released and is now available as an API on Vertex AI and Google AI Studio. &lt;a href=&#34;https://deepmind.google/technologies/gemini/#introduction&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://blog.google/technology/ai/google-gemini-ai/#sundar-note&#34;&gt;Ref&lt;/a&gt; This report presents a simple Google Apps Script example for automatically creating descriptions of files on Google Drive using the Gemini Pro API. It is considered that when the description of files on Google Drive can be easily created, it will help users manage a lot of files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drive API v3 has been released to Advanced Google services</title>
      <link>https://tanaikech.github.io/2023/12/13/drive-api-v3-has-been-released-to-advanced-google-services/</link>
      <pubDate>Wed, 13 Dec 2023 20:47:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/12/13/drive-api-v3-has-been-released-to-advanced-google-services/</guid>
      <description>&lt;p&gt;Recently, when Drive API is enabled at Advanced Google services with the script editor, Drive API v3 is automatically used. In the official document, Drive API v3 has already been used. &lt;a href=&#34;https://developers.google.com/apps-script/advanced/drive&#34;&gt;Ref&lt;/a&gt; In the current stage, the users can select V3 and V2.&lt;/p&gt;&#xA;&lt;p&gt;When Drive API v3 is used with Advanced Google services, the following advantages can be considered.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Drive API v3 can be used with only the scopes for Drive API without adding a scope &lt;code&gt;https://www.googleapis.com/auth/script.external_request&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The files and folders can be searched by the search query of &lt;code&gt;createdTime&lt;/code&gt;. &lt;a href=&#34;https://tanaikech.github.io/2022/10/19/workaround-createddate-cannot-be-used-with-searchfiles-of-driveapp-in-google-apps-script/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;references&#34;&gt;References:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;You can see the official document of &amp;ldquo;&lt;a href=&#34;https://developers.google.com/drive/api/guides/v2-to-v3-reference&#34;&gt;Drive API v2 &amp;amp; v3 comparison reference&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Footnotes on Google Documents using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/12/13/managing-footnotes-on-google-documents-using-google-apps-script/</link>
      <pubDate>Wed, 13 Dec 2023 09:30:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/12/13/managing-footnotes-on-google-documents-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cd7bf2ca7b9109e081bd64ec50db54fc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231213a/fig1.png&#34;&#xA;     alt=&#34;Managing Footnotes on Google Documents using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Google Documents can be managed by the Document service of Google Apps Script. &lt;a href=&#34;https://developers.google.com/apps-script/reference/document&#34;&gt;Ref&lt;/a&gt; One day, you might have a situation in which you are required to manage the footnotes on Google Documents using Google Apps Script. There are several official documents related to the footnotes for Google Apps Script. &lt;a href=&#34;https://developers.google.com/apps-script/reference/document/footnote&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://developers.google.com/apps-script/reference/document/footnote-section&#34;&gt;Ref&lt;/a&gt; However, unfortunately, I&amp;rsquo;m worried that it might be difficult a little to understand the management of the footnotes from these documents. Actually, I saw some questions related to the footnotes on Google Documents at Stackoverflow. In this report, I would like to introduce a method for managing the footnotes on Google Documents using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technique for Managing Rich Text on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/11/28/technique-for-managing-rich-text-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Tue, 28 Nov 2023 15:57:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/11/28/technique-for-managing-rich-text-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f3aa85e41287e329353ec062e8b64483&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231128a/fig1.png&#34;&#xA;     alt=&#34;Technique for Managing Rich Text on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;One day, you might have a situation where you are required to manage rich texts in Google Spreadsheet using Google Apps Script. In this report, I would like to introduce the basic technique for managing rich texts with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At Google Spreadsheet, rich texts can be used as a cell value. The rich texts can be also managed by Google Apps Script. &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/rich-text-value&#34;&gt;Ref&lt;/a&gt; When I saw the official document related to the rich texts with Google Apps Script, I&amp;rsquo;m worried that it might be difficult a little for users to manage the rich texts using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - PDFApp</title>
      <link>https://tanaikech.github.io/2023/11/26/updated-gas-library-pdfapp/</link>
      <pubDate>Sun, 26 Nov 2023 15:28:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/11/26/updated-gas-library-pdfapp/</guid>
      <description>&lt;h2 id=&#34;pdfapp-was-updated-to-v103&#34;&gt;PDFApp was updated to v1.0.3.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (November 26, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From &lt;a href=&#34;https://github.com/Hopding/pdf-lib/issues/252&#34;&gt;this discussion&lt;/a&gt;, I changed the logic of the method &lt;code&gt;mergePDFs&lt;/code&gt;. The method for using &lt;code&gt;mergePDFs&lt;/code&gt; and the output are not changed. With this modification, the large PDF data can be merged.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/PDFApp&#34;&gt;https://github.com/tanaikech/PDFApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Making Users Edit Protected Cells using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/11/24/workaround-making-users-edit-protected-cells-using-google-apps-script/</link>
      <pubDate>Fri, 24 Nov 2023 09:30:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/11/24/workaround-making-users-edit-protected-cells-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a36770c4609fdb73ed1b8ed43c0612fd&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;One day, you might have a situation where you are required to make users edit the protected cells using Google Apps Script. This report introduces a workaround for achieving this situation. The key factors for achieving this are as follows. 1. Run the script as the owner of Spreadsheet even when the script is run by a user. 2. In order to run the script as the owner, the installable triggers and the Web Apps are used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technique of Array Processing for Custom Functions on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/11/20/technique-of-array-processing-for-custom-functions-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 20 Nov 2023 10:53:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/11/20/technique-of-array-processing-for-custom-functions-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e3f0bf29aad48d6e2e4ca096269e5a9d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231120a/fig1.png&#34;&#xA;     alt=&#34;Technique of Array Processing for Custom Functions on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;At Google Spreadsheet, custom functions created by Google Apps Script can be used. &lt;a href=&#34;https://developers.google.com/apps-script/guides/sheets/functions&#34;&gt;Ref&lt;/a&gt; When the custom function is used, the users can create a function for expanding the built-in functions for Spreadsheet. One day, you might have a situation for executing the custom function using an array. For example, under the situation that your custom function uses a single value instead of an array as the argument, when you want to use an array for each argument of the custom function, it is required to modify the original script of the custom function or the function calling the custom function. In this report, I would like to introduce a technique of array processing for the custom functions on Google Spreadsheets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technique for Processing Google Spreadsheet Including Merged Cells using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/11/13/technique-for-processing-google-spreadsheet-including-merged-cells-using-google-apps-script/</link>
      <pubDate>Mon, 13 Nov 2023 09:04:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/11/13/technique-for-processing-google-spreadsheet-including-merged-cells-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a03b0bb4218a19b41d507a5b649e3802&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;At Google Spreadsheet, the cells can be merged as one cell. But, when the Spreadsheet including the merged cells is used with Google Apps Script, the script becomes a bit complicated. Also, I sometimes find some questions like this situation on Stackoverflow. In this report, I would like to introduce a technique for easily using the Spreadsheet including the merged cells with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;principle&#34;&gt;Principle&lt;/h2&gt;&#xA;&lt;p&gt;Before it introduces the sample scripts, I would like to introduce the principle for using the Spreadsheet for the merged cells. You can understand the principle of this method from the following sample input and output images.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Files without Authorizing Scopes by Shared Users with Dialog on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/11/08/uploading-files-without-authorizing-scopes-by-shared-users-with-dialog-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 08 Nov 2023 15:25:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/11/08/uploading-files-without-authorizing-scopes-by-shared-users-with-dialog-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dbcf9ba8674b898ee61baf5c33825a0b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;One day, you might have a situation where you are required to make the shared users upload a file and text using a dialog or sidebar on Google Spreadsheet to your Google Drive and Spreadsheet without authorization by the users. This report introduces a solution for achieving this situation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Google Spreadsheet can run Javascript on a dialog and a sidebar. &lt;a href=&#34;https://developers.google.com/apps-script/guides/dialogs&#34;&gt;Ref&lt;/a&gt; These can be used as a strong tool for working on Spreadsheet. There might be a situation where you want to make the shared users input a value and upload a file without authorization of the scopes. In this report, I would like to introduce 2 patterns to achieve this goal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Detecting Change of IMPORTRANGE using OnEdit trigger with Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/10/30/workaround-detecting-change-of-importrange-using-onedit-trigger-with-google-apps-script/</link>
      <pubDate>Mon, 30 Oct 2023 16:10:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/10/30/workaround-detecting-change-of-importrange-using-onedit-trigger-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0cf57b2684c2ac2c2562b1ec229c9ace&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231030a/fig1.png&#34;&#xA;     alt=&#34;Workaround: Detecting Change of IMPORTRANGE using OnEdit trigger with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;One day, you might have a situation where you are required to update a sheet using Google Apps Script when the cell values retrieved by IMPORTRANGE are changed. This report introduces a workaround for achieving this situation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Google Apps Script can be executed by several triggers. &lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers&#34;&gt;Ref&lt;/a&gt; When a cell in a Google Spreadsheet is manually edited, a function of Google Apps Script can be executed by detecting this edit. In most cases, the OnEdit trigger trigger of the simple trigger or the installable trigger is used. When the OnEdit trigger is used, a function can be executed by manually editing a cell. When the function is executed, the function can be run by giving the event object including the information about the edited cell.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieve Comments with Emoji Reactions from Google Documents, Google Slides, and Google Spreadsheets using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/10/26/retrieve-comments-with-emoji-reactions-from-google-documents-google-slides-and-google-spreadsheets-using-google-apps-script/</link>
      <pubDate>Thu, 26 Oct 2023 15:44:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/10/26/retrieve-comments-with-emoji-reactions-from-google-documents-google-slides-and-google-spreadsheets-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7713944094af5643fcf13b8d362d0c68&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231026a/fig1.png&#34;&#xA;     alt=&#34;Retrieve Comments with Emoji Reactions from Google Documents, Google Slides, and Google Spreadsheets using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This report introduces the method for retrieving the Emoji reactions from the comments in Google Docs files (Google Documents, Google Slides, and Google Spreadsheets) using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Recently, the Emoji reactions have been implemented in the comments on Google Docs files (Google Documents, Google Slides, and Google Spreadsheets). &lt;a href=&#34;https://workspaceupdates.googleblog.com/2023/10/release-notes-10-06-2023.html&#34;&gt;Ref&lt;/a&gt; With this implementation, the collaborative work has been higher. Here, it is considered that when the Emoji reactions can be retrieved from the Google Docs files, the statistics of the reactions will be also more useful for increasing collaboration. This report introduces a sample script for retrieving Comments including the Emoji reactions from Google Docs files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inserting HTML including Javascript on Web Apps Created by Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/10/25/inserting-html-including-javascript-on-web-apps-created-by-google-apps-script/</link>
      <pubDate>Wed, 25 Oct 2023 16:12:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/10/25/inserting-html-including-javascript-on-web-apps-created-by-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a5b5b5646b97934578fbb22ee503e6aa&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231025a/fig1.gif&#34;&#xA;     alt=&#34;Inserting HTML including Javascript on Web Apps Created by Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;One day, you might have a situation where you are required to create a Web Apps with Google Apps Script and are required to load another HTML created by Javascript on the Web Apps. This report will help achieve such a situation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Google Apps Script can create Web Apps. &lt;a href=&#34;https://developers.google.com/apps-script/guides/web&#34;&gt;Ref&lt;/a&gt; When you access the Web Apps using your browser, you can see the HTML. When your browser can run Javascript, you can see the HTML reflecting the Javascript. The Web Apps created by Google Apps Script is one of the important and useful cloud applications. About the Web Apps, you have a situation where it is required to insert another HTML to the current HTML. And, another HTML might be required to be created by Javascript including the HTML. However, it is difficult a little to find detailed information about this. This report introduces a simple sample script for achieving such a situation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Executing Google Apps Script with Service Account</title>
      <link>https://tanaikech.github.io/2023/10/19/executing-google-apps-script-with-service-account/</link>
      <pubDate>Thu, 19 Oct 2023 14:59:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/10/19/executing-google-apps-script-with-service-account/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/304fea821ca36b8e9ccebe9814eaed82&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20231019a/fig2.png&#34;&#xA;     alt=&#34;Executing Google Apps Script with Service Account&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;One day, you might have a situation where it is required to run Google Apps Script using the service account. Unfortunately, in the current stage, Google Apps Script cannot be directly run with the service account because of the current specification. So, this report introduces a workaround for executing Google Apps Script using the service account.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;When you want to execute Google Apps Script from outside of Google, as the basic approach, it can be achieved by Google Apps Script API. &lt;a href=&#34;https://developers.google.com/apps-script/api/reference/rest/v1/scripts/run&#34;&gt;Ref&lt;/a&gt; In order to use Google Apps Script, it is required to link the Google Apps Script project with the Google Cloud Platform project. &lt;a href=&#34;https://github.com/tanaikech/Linking-Google-Cloud-Platform-Project-to-Google-Apps-Script-Project-for-New-IDE&#34;&gt;Ref&lt;/a&gt; But, in the current stage, Google Apps Script can be executed by Google Apps Script API with only the access token obtained from OAuth2. Unfortunately, the access token obtained by the service account cannot used for executing Google Apps Script using Google Apps Script API. It seems that this is the current specification on the Google side. However, there might be a case that it is required to execute Google Apps Script using the service account. In this report, I would like to introduce a workaround for executing Google Apps Script using the service account. In this workaround, the Web Apps created by Google Apps Script is used. The Web Apps can be used for executing the preserved functions of &lt;code&gt;doGet&lt;/code&gt; and &lt;code&gt;doPost&lt;/code&gt; from outside of Google. &lt;a href=&#34;https://developers.google.com/apps-script/guides/web&#34;&gt;Ref&lt;/a&gt; In this workaround, this Web Apps is used for executing the various functions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - HtmlFormApp</title>
      <link>https://tanaikech.github.io/2023/10/17/updated-gas-library-htmlformapp/</link>
      <pubDate>Tue, 17 Oct 2023 10:46:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/10/17/updated-gas-library-htmlformapp/</guid>
      <description>&lt;h2 id=&#34;htmlformapp-was-updated-to-v102&#34;&gt;HtmlFormApp was updated to v1.0.2.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (October 17, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The 2nd argument &lt;code&gt;row&lt;/code&gt; of &lt;code&gt;appendFormData(object, row)&lt;/code&gt; was added. This is from &lt;a href=&#34;https://github.com/tanaikech/HtmlFormApp/issues/1&#34;&gt;this suggestion&lt;/a&gt;. When &lt;code&gt;row&lt;/code&gt; is used, the value is put into the specific row of the Spreadsheet. In this case, please set the value of &lt;code&gt;row&lt;/code&gt; more than 1.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In this case, the submitted row can be forcefully put into the specific row of Google Spreadsheet. So, when you run &lt;code&gt;appendFormData(object, row)&lt;/code&gt; by the constant value of &lt;code&gt;row&lt;/code&gt;, the submitted row is put into the same row. Please be careful about this.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/HtmlFormApp&#34;&gt;https://github.com/tanaikech/HtmlFormApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Go Library - go-gettokenbyserviceaccount</title>
      <link>https://tanaikech.github.io/2023/10/12/updated-go-library-go-gettokenbyserviceaccount/</link>
      <pubDate>Thu, 12 Oct 2023 14:59:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/10/12/updated-go-library-go-gettokenbyserviceaccount/</guid>
      <description>&lt;h2 id=&#34;go-gettokenbyserviceaccount-was-updated-to-v101&#34;&gt;go-gettokenbyserviceaccount was updated to v1.0.1&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (October 12, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Updated README.md and updated the script.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can get this from &lt;a href=&#34;https://github.com/tanaikech/go-gettokenbyserviceaccount&#34;&gt;https://github.com/tanaikech/go-gettokenbyserviceaccount&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing History of Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/10/05/managing-history-of-google-apps-script/</link>
      <pubDate>Thu, 05 Oct 2023 10:53:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/10/05/managing-history-of-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2453685e8e6b272e357b1f5935ca6e53&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/ScriptHistoryApp/raw/master/images/fig2.png&#34;&#xA;     alt=&#34;Managing History of Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;&#xA;&lt;p&gt;This report introduces the method for managing the histories of the Google Apps Script project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;On August 23, 2023, the project history has been implemented in the new IDE of Google Apps Script. &lt;a href=&#34;https://developers.google.com/apps-script/docs/release-notes#August_23_2023&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://workspaceupdates.googleblog.com/2023/08/apps-script-project-history.html&#34;&gt;Ref&lt;/a&gt; In the current stage, the users can see the history of the previously deployed script version. This is a very important implementation for a lot of developers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - ScriptHistoryApp</title>
      <link>https://tanaikech.github.io/2023/10/05/gas-library-scripthistoryapp/</link>
      <pubDate>Thu, 05 Oct 2023 10:50:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/10/05/gas-library-scripthistoryapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for managing the histories of the Google Apps Script project.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/ScriptHistoryApp/raw/master/images/fig1.gif&#34;&#xA;     alt=&#34;GAS Library - ScriptHistoryApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;On August 23, 2023, the project history has been implemented in the new IDE of Google Apps Script. &lt;a href=&#34;https://developers.google.com/apps-script/docs/release-notes#August_23_2023&#34;&gt;Ref&lt;/a&gt; and &lt;a href=&#34;https://workspaceupdates.googleblog.com/2023/08/apps-script-project-history.html&#34;&gt;Ref&lt;/a&gt; In the current stage, the users can see the history of the previously deployed script version. This is a very important implementation for a lot of developers.&lt;/p&gt;&#xA;&lt;p&gt;Here, I remember the classic IDE. In the case of the classic IDE, the users had been able to see the previously saved script version regardless of the deployment and just the save of the script. This is not implemented in the new IDE. I would like to expect that this will be implemented in the future update.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Taking Advantage of Auto-completion of Script Editor for Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/09/17/taking-advantage-of-auto-completion-of-script-editor-for-google-apps-script/</link>
      <pubDate>Sun, 17 Sep 2023 09:41:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/09/17/taking-advantage-of-auto-completion-of-script-editor-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b2f0461c1060b54d2edbd43733708f52&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230917a/fig1.png&#34;&#xA;     alt=&#34;Taking Advantage of Auto-completion of Script Editor for Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This is a report for taking advantage of the auto-completion of the script editor for Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, the auto-completion is implemented in the script editor of Google Apps Script. This auto-completion can be used for not only the built-in classes and methods but also the methods for Javascript. This helps develop scripts and applications very much. In the case of the built-in classes and methods and the methods for Javascript, you can see the detailed specifications of the documents like &lt;a href=&#34;https://developers.google.com/apps-script/reference&#34;&gt;the official documents&lt;/a&gt; and &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference&#34;&gt;developer.mozilla.org&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Copy Date Object between Google Spreadsheets with Different Timezone using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/09/03/copy-date-object-between-google-spreadsheets-with-different-timezone-using-google-apps-script/</link>
      <pubDate>Sun, 03 Sep 2023 16:26:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/09/03/copy-date-object-between-google-spreadsheets-with-different-timezone-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fd525434b51b8b0df3293c0067f071ca&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230903a/fig1.png&#34;&#xA;     alt=&#34;Copy Date Object between Google Spreadsheets with Different Timezone using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for copying the date object between Google Spreadsheets with the different time zones using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;One day, you might have a situation in which it is required to copy the date object between Google Spreadsheets with the different time zones using Google Apps Script. In this post, I would like to introduce the sample scripts for achieving this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Focusing Selected Cell to Top Left on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/08/31/focusing-selected-cell-to-top-left-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Thu, 31 Aug 2023 10:22:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/31/focusing-selected-cell-to-top-left-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9f613d6fec34892dc211f30644e0a5ea&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230831a/fig1.gif&#34;&#xA;     alt=&#34;Focusing Selected Cell to Top Left on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for moving the selected cell to the top left on Google Spreadsheet to focus it using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;One day, there might be a case where you are required to focus the specific cell on Google Spreadsheet to help edit cells. In this post, I would like to introduce a sample script for achieving this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Values to transfer between Javascript and Google Apps Script with google.script.run</title>
      <link>https://tanaikech.github.io/2023/08/28/report-values-to-transfer-between-javascript-and-google-apps-script-with-google.script.run/</link>
      <pubDate>Mon, 28 Aug 2023 10:40:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/28/report-values-to-transfer-between-javascript-and-google-apps-script-with-google.script.run/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9927dc5c12ebca118ff8f3f4d539c95d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230828a/fig1.png&#34;&#xA;     alt=&#34;Report: Values to transfer between Javascript and Google Apps Script with google.script.run&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;At the Google Apps Script project, the values can be transferred from HTML to Google Apps Script using &lt;code&gt;google.script.run&lt;/code&gt; with Javascript. In this case, unfortunately, the values of all types cannot be transferred. In the official document, it says as follows. &lt;a href=&#34;https://developers.google.com/apps-script/guides/html/reference/run#parameters&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Most types are legal, but not Date, Function, or DOM element besides form; see description&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Legal parameters are JavaScript primitives like a Number, Boolean, String, or null, as well as JavaScript objects and arrays that are composed of primitives, objects, and arrays. A form element within the page is also legal as a parameter, but it must be the function’s only parameter. Requests fail if you attempt to pass a Date, Function, DOM element besides a form, or other prohibited type, including prohibited types inside objects or arrays. Objects that create circular references will also fail, and undefined fields within arrays become null. Note that an object passed to the server becomes a copy of the original. If a server function receives an object and changes its properties, the properties on the client are not affected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - PDFApp</title>
      <link>https://tanaikech.github.io/2023/08/21/updated-gas-library-pdfapp/</link>
      <pubDate>Mon, 21 Aug 2023 14:10:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/21/updated-gas-library-pdfapp/</guid>
      <description>&lt;h2 id=&#34;pdfapp-was-updated-to-v102&#34;&gt;PDFApp was updated to v1.0.2.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (August 21, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A new method of &lt;code&gt;insertHeaderFooter&lt;/code&gt; was added. &lt;a href=&#34;%5B#insertheaderfooter%5D(https://github.com/tanaikech/PDFApp#insertheaderfooter)&#34;&gt;Ref&lt;/a&gt; When this method is used, the custom header and footer can be added when a Google Spreadsheet is exported as PDF.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/PDFApp&#34;&gt;https://github.com/tanaikech/PDFApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Add Header and Footer to Exported PDF from Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/08/21/add-header-and-footer-to-exported-pdf-from-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 21 Aug 2023 12:08:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/21/add-header-and-footer-to-exported-pdf-from-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1aac9139666963cb9268082763494218&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230821a/fig1.png&#34;&#xA;     alt=&#34;Add Header and Footer to Exported PDF from Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for adding header and footer to PDF using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, when Google Spreadsheet is manually exported as a PDF file at &amp;ldquo;Print settings&amp;rdquo; on the UI of Spreadsheet, the custom header and footer can be added as shown in the following image.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230821a/fig2.png&#34;&#xA;     alt=&#34;Add Header and Footer to Exported PDF from Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - PDFApp</title>
      <link>https://tanaikech.github.io/2023/08/18/updated-gas-library-pdfapp/</link>
      <pubDate>Fri, 18 Aug 2023 21:20:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/18/updated-gas-library-pdfapp/</guid>
      <description>&lt;h2 id=&#34;pdfapp-was-updated-to-v101&#34;&gt;PDFApp was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (August 18, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;About the method of &amp;ldquo;getMetadata&amp;rdquo;, &lt;code&gt;pageInfo&lt;/code&gt; is added to the retrieved metadata. By this, each page size can be obtained.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/PDFApp&#34;&gt;https://github.com/tanaikech/PDFApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - TriggerApp</title>
      <link>https://tanaikech.github.io/2023/08/18/updated-gas-library-triggerapp/</link>
      <pubDate>Fri, 18 Aug 2023 15:21:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/18/updated-gas-library-triggerapp/</guid>
      <description>&lt;h2 id=&#34;triggerapp-was-updated-to-v101&#34;&gt;TriggerApp was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (August 18, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When &lt;code&gt;toDay&lt;/code&gt; is not used, there was a case that the next trigger is not installed. This bug was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/TriggerApp&#34;&gt;https://github.com/tanaikech/TriggerApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - PDFApp</title>
      <link>https://tanaikech.github.io/2023/08/17/gas-library-pdfapp/</link>
      <pubDate>Thu, 17 Aug 2023 14:46:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/17/gas-library-pdfapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for managing PDFs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230817a/fig1.png&#34;&#xA;     alt=&#34;GAS Library - PDFApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Google Apps Script is one of the most powerful tools for cloud computing. When Google Apps Script is used, the result can be obtained even when the user doesn&amp;rsquo;t stay in front of the PC and mobile phone by the triggers. One day, there might be a case where it is required to manage PDF data using Google Apps Script. The combination of Google Docs (Document, Spreadsheet, and Slide) and PDFs is useful for various situations. However, unfortunately, there are no built-in methods for directly managing PDFs using Google Apps Script. Fortunately, it seems that &lt;a href=&#34;https://pdf-lib.js.org/&#34;&gt;pdf-lib&lt;/a&gt; of the Javascript library can be used with Google Apps Script. By this, PDF data can be managed with Google Apps Script using this library. This Google Apps Script library manages PDFs by using it as a wrapper between Google Apps Script and pdf-lib.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cooking PDF over Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/08/17/cooking-pdf-over-google-apps-script/</link>
      <pubDate>Thu, 17 Aug 2023 14:42:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/17/cooking-pdf-over-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/42ad6a83322364d0b99ad11260862f04&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230817a/fig1.png&#34;&#xA;     alt=&#34;Cooking PDF over Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;When PDF file can be managed with Google Apps Script, that will lead to the automation process on cloud. In this report, the method for cooking PDF over Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Google Apps Script is one of the strong tools for achieving the automation process. When Google Apps Script can be used for the situation, it can be processed with cloud computing. By this, the users are not required to stay on the desks with the PC. One day, there might be a case where you are required to manage PDF files using Google Apps Script. When PDF files can be managed with Google Apps Script, that will be very important for achieving the automation process. Unfortunately, there are no built-in methods for directly managing PDF data using Google Apps Script. Fortunately, after the V8 runtime has been released, several raw Javascript libraries could be used with Google Apps Script. &lt;a href=&#34;https://pdf-lib.js.org/&#34;&gt;pdf-lib&lt;/a&gt; is also one of them. When this is used, PDF data can be cooked over Google Apps Script. In this report, I would like to introduce achieving this using a Google Apps Script library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Efficiently Deleting Rows by Conditions on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/08/13/benchmark-efficiently-deleting-rows-by-conditions-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Sun, 13 Aug 2023 15:51:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/13/benchmark-efficiently-deleting-rows-by-conditions-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ef8969755f4a00275be7e8fc93dfc00e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230813a/fig1.png&#34;&#xA;     alt=&#34;Benchmark: Efficiently Deleting Rows by Conditions on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;In this report, I would like to introduce a sample script for efficiently deleting rows by conditions on Google Spreadsheet using Google Apps Script. Recently, I had a situation for being required to achieve this situation. In my report, it has already known that when Sheets API is used, the rows can be efficiently deleted by a condition. &lt;a href=&#34;https://tanaikech.github.io/2020/05/11/hiding-and-deleting-rows-and-columns-on-google-spreadsheet-using-google-apps-script/&#34;&gt;Ref&lt;/a&gt; However, in that case, Sheets API couldn&amp;rsquo;t be used. Under this situation, I came up with a method. In this report, I would like to introduce this method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been featured in Google Workspace Developer Newsletter on July 2023</title>
      <link>https://tanaikech.github.io/2023/08/12/my-report-has-been-featured-in-google-workspace-developer-newsletter-on-july-2023/</link>
      <pubDate>Sat, 12 Aug 2023 15:04:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/12/my-report-has-been-featured-in-google-workspace-developer-newsletter-on-july-2023/</guid>
      <description>&lt;p&gt;My report &amp;ldquo;&lt;a href=&#34;https://medium.com/google-cloud/easily-managing-time-driven-triggers-using-google-apps-script-7fa48546b4e7&#34;&gt;Easily Managing Time-Driven Triggers Using Google Apps Script&lt;/a&gt;&amp;rdquo; has been featured in &amp;ldquo;Community Spotlight&amp;rdquo; of Google Workspace Developer Newsletter on July 2023&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://developers.google.com/workspace/newsletters#expandable-2&#34;&gt;https://developers.google.com/workspace/newsletters#expandable-2&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Embedding Objects in PDF using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/08/07/embedding-objects-in-pdf-using-google-apps-script/</link>
      <pubDate>Mon, 07 Aug 2023 17:06:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/07/embedding-objects-in-pdf-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b085cb08d573afa2294e2a8f887cdbd2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230807a/fig1.png&#34;&#xA;     alt=&#34;Embedding Objects in PDF using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for embedding the objects in PDF using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I had a situation where it is required to manage PDFs using Google Apps Script. At that time, I had a situation where it is required to embed objects of texts and images in PDF using Google Apps Script. So, I created the following Class with Google Apps Script. When this Class is used, the objects of texts and images can embed in PDF.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating PDF Forms from Google Slide Template using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/08/05/creating-pdf-forms-from-google-slide-template-using-google-apps-script/</link>
      <pubDate>Sat, 05 Aug 2023 16:34:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/05/creating-pdf-forms-from-google-slide-template-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/682dec95002f8cc25f1c5f2349966b8c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230805a/fig1.png&#34;&#xA;     alt=&#34;Creating PDF Forms from Google Slide Template using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating PDF forms from a Google Slide template using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I had a situation where it is required to create a custom PDF form. In that case, I thought that when a PDF form can be created from a template, it might be useful. So, I created the following Class with Google Apps Script. When this Class is used, a custom PDF form can be easily created from a Google Slide as a template.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving and Putting Values for PDF Forms using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/08/02/retrieving-and-putting-values-for-pdf-forms-using-google-apps-script/</link>
      <pubDate>Wed, 02 Aug 2023 12:17:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/08/02/retrieving-and-putting-values-for-pdf-forms-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a8a387614410b8c6c2c1addbce4dd23c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230802a/fig1.png&#34;&#xA;     alt=&#34;Retrieving and Putting Values for PDF Forms using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving and putting values for PDF Forms using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;PDF can have the PDF Form for inputting the values in the PDF by the user. &lt;a href=&#34;https://helpx.adobe.com/acrobat/using/pdf-forms-basics.html&#34;&gt;Ref&lt;/a&gt; Recently, I had a situation that required me to retrieve and put the values to the PDF Form using Google Apps Script. In order to achieve this, I created a Class object with Google Apps Script. That is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2023/07/27/updated-gas-library-onedriveapp/</link>
      <pubDate>Thu, 27 Jul 2023 15:38:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/27/updated-gas-library-onedriveapp/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.2 (July 27, 2023)&lt;/p&gt;&#xA;&lt;p&gt;Checked the array of &lt;code&gt;to&lt;/code&gt;, &lt;code&gt;cc&lt;/code&gt;, and &lt;code&gt;bcc&lt;/code&gt; for the sendEmails method.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;GitHub of OnedriveApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changing Order of Pages in PDF file using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/27/changing-order-of-pages-in-pdf-file-using-google-apps-script/</link>
      <pubDate>Thu, 27 Jul 2023 11:51:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/27/changing-order-of-pages-in-pdf-file-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9de62573049e72b44a069fc31348524b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230727a/fig1.png&#34;&#xA;     alt=&#34;Changing Order of Pages in PDF file using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for changing the order of pages in a PDF file using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Before you run this script, please set the variables in the function &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * ### Description&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * Changing order of pages in a PDF file.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {Object} fileId is file ID of PDF file. newOrderOfpages is new order of pages. About &amp;#34;ignoreSkippedPages&amp;#34;, if this is false, when the PDF has 5 pages and &amp;#34;newOrderOfpages&amp;#34; is &amp;#34;[3, 2]&amp;#34;, the exported PDF file has 5 pages of 3, 2, 1, 4, 5. If this is true, when the PDF has 5 pages and &amp;#34;newOrderOfpages&amp;#34; is &amp;#34;[3, 2]&amp;#34;, the exported PDF file has only 2 pages of 3 and 2.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @return {void}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;changeOrderOfPDFPages_&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;newOrderOfpages&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ignoreSkippedPages&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Load pdf-lib&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdn.jsdelivr.net/npm/pdf-lib/dist/pdf-lib.min.js&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  eval(&lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;()); &lt;span style=&#34;color:#75715e&#34;&gt;// Load pdf-lib&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfData&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PDFLib&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDFDocument&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;load&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Uint8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBytes&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfPages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getPageCount&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxPage&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;(...&lt;span style=&#34;color:#a6e22e&#34;&gt;newOrderOfpages&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfPages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxPage&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfPages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;newOrderOfpages&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Maximum page in the order of pages is over than the maximum page of the original PDF file.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;skippedPages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ignoreSkippedPages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfPages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;newOrderOfpages&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;skippedPages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...Array(&lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfPages&lt;/span&gt;)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .&lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;newOrderOfpages&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PDFLib&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDFDocument&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;create&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;copyPages&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfData&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [...Array(&lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfPages&lt;/span&gt;)].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [...&lt;span style=&#34;color:#a6e22e&#34;&gt;newOrderOfpages&lt;/span&gt;, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;skippedPages&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addPage&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bytes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;save&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Int8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bytes&lt;/span&gt;)],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;MimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDF&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample.pdf&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set a file ID of your a PDF file or a file ID of Google Docs files (Document, Spreadsheet, Slide).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;newOrderOfpages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;]; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set new order of the pages in a PDF file. In this sample, the order of pages of the original PDF file is changed to 3, 1, 2, 5, 4.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ignoreSkippedPages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// If this is false, when the PDF has 5 pages and &amp;#34;newOrderOfpages&amp;#34; is &amp;#34;[3, 2]&amp;#34;, the exported PDF file has 5 pages of 3, 2, 1, 4, 5. If this is true, when the PDF has 5 pages and &amp;#34;newOrderOfpages&amp;#34; is &amp;#34;[3, 2]&amp;#34;, the exported PDF file has only 2 pages of 3 and 2.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;changeOrderOfPDFPages_&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;newOrderOfpages&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ignoreSkippedPages&lt;/span&gt; }).&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample.pdf&amp;#34;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When this script is run, a new PDF file is created with the new order of pages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2023/07/26/updated-gas-library-onedriveapp/</link>
      <pubDate>Wed, 26 Jul 2023 21:48:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/26/updated-gas-library-onedriveapp/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.1 (July 26, 2023)&lt;/p&gt;&#xA;&lt;p&gt;A bug of &amp;ldquo;Send Email messages&amp;rdquo; was removed.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;GitHub of OnedriveApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding Flow of Request to Web Apps Created by Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/25/understanding-flow-of-request-to-web-apps-created-by-google-apps-script/</link>
      <pubDate>Tue, 25 Jul 2023 16:02:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/25/understanding-flow-of-request-to-web-apps-created-by-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/131ba814a1f6012fd6a5ffe11789971f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230725a/fig1.png&#34;&#xA;     alt=&#34;Understanding Flow of Request to Web Apps Created by Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Here, I would like to introduce a report for understanding the flow of the request to Web Apps created by Google Apps Script. There might be a case that various applications using the Web Apps are created and the Web Apps are used as the webhook. In that case, it is considered that when you have understood the flow of requests to the Web Apps, your goal might be able to be smoothly achieved. In this report, I would like to introduce the information about it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Management of PDF Metadata using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/24/management-of-pdf-metadata-using-google-apps-script/</link>
      <pubDate>Mon, 24 Jul 2023 14:45:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/24/management-of-pdf-metadata-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9ee06b508624e252dd0e32efc348a59a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230724b/fig1.png&#34;&#xA;     alt=&#34;Management of PDF Metadata using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for managing the metadata of PDF data using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;There might be a case in that you want to retrieve and update the metadata of PDF data using Google Apps Script. In this post, I would like to introduce achieving this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;class-managepdfmetadata&#34;&gt;Class ManagePdfMetadata&lt;/h2&gt;&#xA;&lt;p&gt;This is a Class ManagePdfMetadata. This Class is used for managing the metadata of PDF files using Google Apps Script. And, in this Class, a Javascript library of &lt;a href=&#34;https://pdf-lib.js.org/&#34;&gt;pdf-lib&lt;/a&gt; is used for managing the PDF metadata. This Javascript library is loaded in this Class.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Overwrapped Cells on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/24/overwrapped-cells-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 24 Jul 2023 09:00:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/24/overwrapped-cells-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b56e12dd1f2f15997b113b4738cf7f8b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230724a/fig3.gif&#34;&#xA;     alt=&#34;Overwrapped Cells on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for checking the overwrapped cells of multiple ranges on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When applications are developed, there might be a case that it is required to confirm whether 2 ranges on Google Spreadsheet are overwrapped. In this post, I would like to introduce a sample script for achieving this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;method-getoverwrappedcells&#34;&gt;Method: &lt;code&gt;getOverwrappedCells&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The following script is a method of &lt;code&gt;getOverwrappedCells&lt;/code&gt;. This is the main script of this post. This method returns the information about the overwrapped cells by inputting an array including the Class Range object. For example, as the default response, when each cell in &amp;ldquo;range1&amp;rdquo; and &amp;ldquo;range2&amp;rdquo; is overwrapped, &lt;code&gt;true&lt;/code&gt; is returned. When &lt;code&gt;{ responseType: &amp;quot;list&amp;quot; }&lt;/code&gt; is used, the cell coordinates of the overwrapped cells are returned as an array.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatically Refreshing Basic Filter on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/20/automatically-refreshing-basic-filter-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Thu, 20 Jul 2023 14:18:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/20/automatically-refreshing-basic-filter-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/03308f87b6c9568dd277e43eb646a75e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for automatically refreshing the basic filter on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;A sample situation is as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230720a/fig1.png&#34;&#xA;     alt=&#34;Automatically Refreshing Basic Filter on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this sample, the basic filter is set to columns &amp;ldquo;B&amp;rdquo; and &amp;ldquo;D&amp;rdquo;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Column &amp;ldquo;B&amp;rdquo;: When the checkbox is checked, the row is hidden.&lt;/li&gt;&#xA;&lt;li&gt;Column &amp;ldquo;D&amp;rdquo;: When the cell value is multiples of 3, the row is hidden. In this case, the custom function &lt;code&gt;=MOD(E2,3)&amp;lt;&amp;gt;0&lt;/code&gt; is used.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For example, under the condition that the basic filter is set to columns &amp;ldquo;B&amp;rdquo; and &amp;ldquo;D&amp;rdquo;, even when a checkbox of &amp;ldquo;B3&amp;rdquo; is checked, unfortunately, the basic filter is not automatically refreshed. In this case, it is required to manually refresh it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - TriggerApp</title>
      <link>https://tanaikech.github.io/2023/07/16/gas-library-triggerapp/</link>
      <pubDate>Sun, 16 Jul 2023 10:31:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/16/gas-library-triggerapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for efficiently managing the time-driven triggers for executing Google Apps Script using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/TriggerApp/raw/master/images/fig1.png&#34;&#xA;     alt=&#34;GAS Library - TriggerApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Google Apps Script can execute with not only the manual operation but also several triggers. The time-driven trigger is one of them, and this is one of a lot of important functions. When the time-driven trigger is used, Google Apps Script can be automatically executed at the time you set without launching the user&amp;rsquo;s PC.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exporting Specific Pages From a PDF as a New PDF Using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/14/exporting-specific-pages-from-a-pdf-as-a-new-pdf-using-google-apps-script/</link>
      <pubDate>Fri, 14 Jul 2023 14:21:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/14/exporting-specific-pages-from-a-pdf-as-a-new-pdf-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9d77f7d634d2d31914396d7dc84b79c3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230714a/fig1.png&#34;&#xA;     alt=&#34;Exporting Specific Pages From a PDF as a New PDF Using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for exporting the specific pages from a PDF as a new PDF using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, &lt;a href=&#34;https://pdf-lib.js.org/&#34;&gt;pdf-lib&lt;/a&gt; is used. In the current stage, it seems that this Javascript can be directly used with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Retrieve PDF data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set a file ID of your a PDF file or a file ID of Google Docs files (Document, Spreadsheet, Slide).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pageNumbers&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;]; &lt;span style=&#34;color:#75715e&#34;&gt;// In this sample, 2 and 4 pages are exported as a PDF.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Merge PDFs.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdn.jsdelivr.net/npm/pdf-lib/dist/pdf-lib.min.js&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  eval(&lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;()); &lt;span style=&#34;color:#75715e&#34;&gt;// Load pdf-lib&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PDFLib&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDFDocument&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;create&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfData&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PDFLib&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDFDocument&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;load&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Uint8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBytes&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;copyPages&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfData&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [...Array(&lt;span style=&#34;color:#a6e22e&#34;&gt;pdfData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getPageCount&lt;/span&gt;())].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;page&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;pageNumbers&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addPage&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;page&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bytes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pdfDoc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;save&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Create a PDF file.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;([...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Int8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bytes&lt;/span&gt;)], &lt;span style=&#34;color:#a6e22e&#34;&gt;MimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDF&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample.pdf&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When this script is run, the specific pages (In this sample, 2 and 4 pages.) in &lt;code&gt;pageNumbers&lt;/code&gt; of a PDF file of &lt;code&gt;fileId&lt;/code&gt; are exported as a new PDF file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Various Formatted Images to PNG Format and JPEG format using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/07/converting-various-formatted-images-to-png-format-and-jpeg-format-using-google-apps-script/</link>
      <pubDate>Fri, 07 Jul 2023 11:43:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/07/converting-various-formatted-images-to-png-format-and-jpeg-format-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7ef9536ff3f788238509d9c366ed9aed&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting various images to PNG Format and JPEG format using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The flow of this sample script is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Convert the file to PNG format by the thumbnail link.&lt;/li&gt;&#xA;&lt;li&gt;Convert PNG format to JPEG format if &lt;code&gt;outputFormat&lt;/code&gt; is &amp;ldquo;JPEG&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;Create the image data in the JPEG format in the root folder as a file.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please set your file ID and output format.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Copying Google Spreadsheet by Removing Container-Bound Script Using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/07/copying-google-spreadsheet-by-removing-container-bound-script-using-google-apps-script/</link>
      <pubDate>Fri, 07 Jul 2023 11:06:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/07/copying-google-spreadsheet-by-removing-container-bound-script-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d5f7b0ddd8c8746c4dff67040a436c5f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230707a/fig1.png&#34;&#xA;     alt=&#34;Copying Google Spreadsheet by Removing Container-Bound Script Using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for copying a Google Spreadsheet including a container-bound script by removing the container-bound script using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When you want to copy a Google Google Spreadsheet including a container-bound script by removing the container-bound script using Google Apps Script, this could be achieved by using &amp;ldquo;get&amp;rdquo; and &amp;ldquo;create&amp;rdquo; methods of Sheets API before. The sample script is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notifying New Release of Google APIs and Google Apps Script with Email using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/05/notifying-new-release-of-google-apis-and-google-apps-script-with-email-using-google-apps-script/</link>
      <pubDate>Wed, 05 Jul 2023 10:43:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/05/notifying-new-release-of-google-apis-and-google-apps-script-with-email-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/79a40abcc70ca3f57db5b4a739bfa849&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for notifying the new release of Google APIs and Google Apps Script with an email using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I published a sample script of &lt;a href=&#34;https://tanaikech.github.io/2023/06/17/retrieving-release-notes-of-google-apps-script-and-google-apis-from-rss-using-google-apps-script/&#34;&gt;&amp;ldquo;Retrieving Release Notes of Google Apps Script and Google APIs from RSS using Google Apps Script&amp;rdquo;&lt;/a&gt;. After this was published, I got an email that it wants to automatically notice the new release of Google APIs and Google Apps Script with an email. From this, I prepared a sample script as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Row Height and Column Width of Table on Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/07/01/managing-row-height-and-column-width-of-table-on-google-slides-using-google-apps-script/</link>
      <pubDate>Sat, 01 Jul 2023 11:28:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/07/01/managing-row-height-and-column-width-of-table-on-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f24abc8e19f525fd4078bdb9762f431b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for managing the row height and the column width of a table on Google Slides using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, &lt;a href=&#34;https://developers.google.com/apps-script/reference/slides&#34;&gt;Google Slides service (SlidesApp)&lt;/a&gt; cannot manage the row height and the column width of the table on Google Slides, while the table width and height can be managed. But, fortunately, when &lt;a href=&#34;https://developers.google.com/slides/api/reference/rest&#34;&gt;Google Slides API&lt;/a&gt; is used, this can be achieved.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I would like to introduce a sample script for managing the row height and the column width of a table on Google Slides using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Relative Reference to Absolute Reference and vice versa of A1Notation on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/06/27/converting-relative-reference-to-absolute-reference-and-vice-versa-of-a1notation-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Tue, 27 Jun 2023 11:56:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/06/27/converting-relative-reference-to-absolute-reference-and-vice-versa-of-a1notation-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d9ae71d8736e168e47c56adb203b7e87&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230627a/fig1.png&#34;&#xA;     alt=&#34;Converting Relative Reference to Absolute Reference and vice versa of A1Notation on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting the relative reference to the absolute reference and vice versa of A1Notation on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;A1Notation is used in the cells on Google Spreadsheet.&lt;/p&gt;&#xA;&lt;p&gt;As the 1st sample, it supposes that a formula of &lt;code&gt;=A1&lt;/code&gt; is put into a cell &amp;ldquo;B1&amp;rdquo;. Under this condition, when the cell &amp;ldquo;B1&amp;rdquo; is copied to &amp;ldquo;B2&amp;rdquo; and &amp;ldquo;C1&amp;rdquo;, the cells &amp;ldquo;B2&amp;rdquo; and &amp;ldquo;C1&amp;rdquo; have the formulas of &lt;code&gt;=A2&lt;/code&gt; and &lt;code&gt;=B1&lt;/code&gt;, respectively. This is the relative reference.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparing File Contents of Files on Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/06/24/comparing-file-contents-of-files-on-google-drive-using-google-apps-script/</link>
      <pubDate>Sat, 24 Jun 2023 15:02:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/06/24/comparing-file-contents-of-files-on-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ed64668e23c155138baa300a31d7f16f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for comparing the file contents of files on Google Drive using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Before you use this script, please enable Drive API at Advanced Google services. And also, please set the file IDs you want to check whether the file contents of the files are the same.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;checkFiles_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;checks&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;md5Checksum&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sha1Checksum&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sha256Checksum&amp;#34;&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fields&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...&lt;span style=&#34;color:#a6e22e&#34;&gt;checks&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;,&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getMimeType&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ([&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FOLDR&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SHORTCUT&amp;#34;&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;some&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MimeType&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;])) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Folders cannot be checked.&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps&amp;#34;&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;temp&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2000&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Drive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;insert&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;temp&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PDF&lt;/span&gt; }, &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;(), { &lt;span style=&#34;color:#a6e22e&#34;&gt;supportsAllDrives&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fields&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;Drive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// If an error occurs, please use DriveApp.getFileById(obj.id).setTrashed(true);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Drive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;(), { &lt;span style=&#34;color:#a6e22e&#34;&gt;supportsAllDrives&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fields&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;checks&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; [...&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;]] &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;]]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }, {});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;every&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; =&amp;gt; [...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Set&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)].&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###fileId1###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your file ID of file 1.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###fileId2###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your file ID of file 2.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;check&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;checkFiles_&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;file1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;file2&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; and &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file2&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; are&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;check&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; not &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;the same data.`&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When this script is run, when the file contents of your inputted files are the same, &lt;code&gt;true&lt;/code&gt; is returned.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Exporting Google Documents as HTML with Image Hyperlinks</title>
      <link>https://tanaikech.github.io/2023/06/21/workaround-exporting-google-documents-as-html-with-image-hyperlinks/</link>
      <pubDate>Wed, 21 Jun 2023 13:23:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/06/21/workaround-exporting-google-documents-as-html-with-image-hyperlinks/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e6bbb3bf341d7ac021f3bcfa523c4ca3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for exporting Google Documents as HTML with the image hyperlinks using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, it seems that the specification for exporting Google Documents as HTML data has been changed. When a Google Document are exported as HTML data before, the images in the Google Document were the image hyperlinks, which are publicly shared. But, in the current stage, when a Google Document is exported as HTML data, the images in the Google Document are the data URL (base64 data) of the images. I guess that this might be related to enhancing the security. When the Google Document is exported as a ZIP file, the HTML and images are separated. But, in this case, the images are required to be included in a specific folder like &amp;ldquo;/images&amp;rdquo;. I&amp;rsquo;m worried that this might bring another issue.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Release Notes of Google Apps Script and Google APIs from RSS using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/06/17/retrieving-release-notes-of-google-apps-script-and-google-apis-from-rss-using-google-apps-script/</link>
      <pubDate>Sat, 17 Jun 2023 15:45:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/06/17/retrieving-release-notes-of-google-apps-script-and-google-apis-from-rss-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fc54bb2c640e3c7ee8b168a7aa1431a8&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the release notes of Google Apps Script and Google APIs from RSS using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, the release notes of Google Apps Script and Google APIs have been published as RSS. By this, the data got to be able to be easily retrieved using XmlService of Google Apps Script. Knowing the latest release notes will be useful for developing the applications. So, I would like to introduce the sample script for retrieving this information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inserting Paragraphs with Checkboxes in Google Documents using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/06/17/inserting-paragraphs-with-checkboxes-in-google-documents-using-google-apps-script/</link>
      <pubDate>Sat, 17 Jun 2023 10:17:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/06/17/inserting-paragraphs-with-checkboxes-in-google-documents-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dec8cf3755e3c2cf294655c605fd6840&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230617a/fig1.png&#34;&#xA;     alt=&#34;Inserting Paragraphs with Checkboxes in Google Documents using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for inserting the paragraphs with the checkboxes in Google Documents using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, Google Documents can create paragraphs with checkboxes as the paragraph bullet. But, unfortunately, this cannot be created by the Google Document service (DocumentApp). Fortunately, it seems that this got to be able to be achieved by Google Docs API. In this post, I would like to introduce a sample script for this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Starting Animation GIF on Google Slide by Clicking</title>
      <link>https://tanaikech.github.io/2023/06/13/workaround-starting-animation-gif-on-google-slide-by-clicking/</link>
      <pubDate>Tue, 13 Jun 2023 11:36:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/06/13/workaround-starting-animation-gif-on-google-slide-by-clicking/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3a34928e74009f9c26a40c121de76d6a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230613a/fig1.gif&#34;&#xA;     alt=&#34;Workaround: Starting Animation GIF on Google Slide by Clicking&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This is a simple workaround for starting an animation GIF on Google Slide by clicking.&lt;/p&gt;&#xA;&lt;p&gt;When an animation GIF is inserted into a slide of Google Slides, the animation is automatically started. By this, the timing for starting cannot be controlled by the user side. In this post, I would like to introduce a workaround for resolving this issue.&#xA;Preparation&#xA;The sample flow is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - TemplateApp</title>
      <link>https://tanaikech.github.io/2023/06/11/gas-library-templateapp/</link>
      <pubDate>Sun, 11 Jun 2023 17:04:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/06/11/gas-library-templateapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for easily managing the template of Google Documents and Google Slides using Google Spreadsheet as a database using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;You might have situations where are required to create multiple Google Documents and Google Slides from the templates using Google Spreadsheet as a database with Google Apps Script. When the simple texts are replaced with the placeholders on the templates, this can be achieved by a simple script. However, there is the case that the images are required to be inserted into the templates. In this case, the script is complicated. The method for replacing the placeholders with the images is different between Google Documents and Google Slides. And, when I see questions on Stackoverflow, a lot of questions related to the template process using Google Documents and Google Slides can be seen. Furthermore, I personally have a lot of questions related to this from other users. From this situation, I thought that when managing the template process can be simply run, it will be useful for a lot of users. So, I created this library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been published at Champion Innovators Content Library and Google Cloud Medium Publication</title>
      <link>https://tanaikech.github.io/2023/06/11/my-report-has-been-published-at-champion-innovators-content-library-and-google-cloud-medium-publication/</link>
      <pubDate>Sun, 11 Jun 2023 10:47:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/06/11/my-report-has-been-published-at-champion-innovators-content-library-and-google-cloud-medium-publication/</guid>
      <description>&lt;p&gt;My report has been published at &lt;a href=&#34;https://cloud.google.com/innovators/champions/content#/?q=tanaike&#34;&gt;Champion Innovators Content Library&lt;/a&gt; and &lt;a href=&#34;https://medium.com/google-cloud&#34;&gt;Google Cloud Medium publication&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://medium.com/google-cloud/easily-implementing-html-form-with-google-spreadsheet-as-database-using-google-apps-script-66472ab7bf6c&#34;&gt;Easily Implementing HTML Form with Google Spreadsheet as Database using Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If these reports will be useful, I’m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trend of google-apps-script Tag on Stackoverflow in first half of 2023</title>
      <link>https://tanaikech.github.io/2023/06/06/trend-of-google-apps-script-tag-on-stackoverflow-in-first-half-of-2023/</link>
      <pubDate>Tue, 06 Jun 2023 09:51:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/06/06/trend-of-google-apps-script-tag-on-stackoverflow-in-first-half-of-2023/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ef5a26a092a0e3b47aced170ead74be9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Recently, I felt a change like never before in the questions on Stackoverflow. In order to confirm this, in this report, the trend of &amp;ldquo;google-apps-script&amp;rdquo; tag on Stackoverflow in the first half (January 1st to June 1st) of 2023 has been investigated. From this report, in 2023 when the affection of COVID-19 has been reduced socially, the appreciable trend was confirmed to the questions including a tag of &amp;ldquo;google-apps-script&amp;rdquo;. It is guessed that the origin of this appreciable trend is due to AI chatbots. The appearance of AI chatbots might give us a phase of major change to the method for understanding the statistical data obtained from online sites.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Easily Implementing HTML Form with Google Spreadsheet as Database using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/05/31/report-easily-implementing-html-form-with-google-spreadsheet-as-database-using-google-apps-script/</link>
      <pubDate>Wed, 31 May 2023 10:02:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/05/31/report-easily-implementing-html-form-with-google-spreadsheet-as-database-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7dcadf189d9bdfd7dc0ae330ab0d84f5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230531a/fig1.png&#34;&#xA;     alt=&#34;Report: Easily Implementing HTML Form with Google Spreadsheet as Database using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This report introduces the method for easily implementing HTML forms with a Google Spreadsheet as a database using Google Apps Script. There are 2 patterns for the HTML form using Google Apps Script. One is that an HTML form is put into the same Google Apps Script project. Another is that an HTML form is put to a different server from a Google Apps Script project. In this report, the methods for easily implementing both patterns are introduced using the sample scripts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - HtmlFormApp</title>
      <link>https://tanaikech.github.io/2023/05/29/updated-gas-library-htmlformapp/</link>
      <pubDate>Mon, 29 May 2023 10:23:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/05/29/updated-gas-library-htmlformapp/</guid>
      <description>&lt;h2 id=&#34;htmlformapp-was-updated-to-v101&#34;&gt;HtmlFormApp was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (May 29, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When multiple files are uploaded, each URL was set as the hyperlink.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/HtmlFormApp&#34;&gt;https://github.com/tanaikech/HtmlFormApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Specification of Properties Service for Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/05/22/report-specification-of-properties-service-for-google-apps-script/</link>
      <pubDate>Mon, 22 May 2023 15:43:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/05/22/report-specification-of-properties-service-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8b057d10fb5f2af014794e57b021c6aa&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230522a/fig1.png&#34;&#xA;     alt=&#34;Report: Specification of Properties Service for Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;In this report, the detailed specification of PropertiesService has been investigated. It is considered that knowing this specification will be useful for developing applications with Google Apps Script. As a result, it was found that the maximum key and value sizes are 524,287 bytes with a 1-byte key and 8,066 bytes, respectively. And also, it was found that the maximum size of PropertiesService is required to be considered with both the key and value sizes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been published at Champion Innovators Content Library and Google Cloud Medium Publication</title>
      <link>https://tanaikech.github.io/2023/05/21/my-report-has-been-published-at-champion-innovators-content-library-and-google-cloud-medium-publication/</link>
      <pubDate>Sun, 21 May 2023 16:04:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/05/21/my-report-has-been-published-at-champion-innovators-content-library-and-google-cloud-medium-publication/</guid>
      <description>&lt;p&gt;My report has been published at &lt;a href=&#34;https://cloud.google.com/innovators/champions/content#/?q=tanaike&#34;&gt;Champion Innovators Content Library&lt;/a&gt; and &lt;a href=&#34;https://medium.com/google-cloud&#34;&gt;Google Cloud Medium publication&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://medium.com/google-cloud/exporting-binary-data-with-batch-requests-using-google-apps-script-1d38367a674a&#34;&gt;Exporting Binary Data with Batch Requests using Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If these reports will be useful, I’m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Google Spreadsheet to HTML Table using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/05/21/converting-google-spreadsheet-to-html-table-using-google-apps-script/</link>
      <pubDate>Sun, 21 May 2023 14:44:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/05/21/converting-google-spreadsheet-to-html-table-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/61932a6acfe02e53ce9d5bca9078c536&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230521a/fig1.png&#34;&#xA;     alt=&#34;Converting Google Spreadsheet to HTML Table using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting Google Spreadsheet to an HTML table using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;There is the case that it is required to convert a sheet in a Google Spreadsheet to an HTML table. For example, there might be a situation that a sheet in a Google Spreadsheet is sent as an email including an HTML table. And, there might be a situation in which a sheet in a Google Spreadsheet is published to an HTML page including the converted HTML table. I have published the method for achieving this before. &lt;a href=&#34;https://github.com/tanaikech/RichTextApp&#34;&gt;Ref&lt;/a&gt; But, in that case, the column width, the row height, merged cells, and the images in the cells couldn&amp;rsquo;t be used. When those are included in the script, the script becomes complicated. So, I couldn&amp;rsquo;t include it. But, recently, I have come up with a simple method for achieving this. In this post. I would like to introduce a sample script for converting a sheet in a Google Spreadsheet to HTML.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been published at Champion Innovators Content Library and Google Cloud Medium Publication</title>
      <link>https://tanaikech.github.io/2023/05/16/my-report-has-been-published-at-champion-innovators-content-library-and-google-cloud-medium-publication/</link>
      <pubDate>Tue, 16 May 2023 14:55:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/05/16/my-report-has-been-published-at-champion-innovators-content-library-and-google-cloud-medium-publication/</guid>
      <description>&lt;p&gt;My report has been published at &lt;a href=&#34;https://cloud.google.com/innovators/champions/content#/?q=tanaike&#34;&gt;Champion Innovators Content Library&lt;/a&gt; and &lt;a href=&#34;https://medium.com/google-cloud&#34;&gt;Google Cloud Medium publication&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://medium.com/google-cloud/best-practices-for-discontinuous-cells-on-google-spreadsheet-by-google-apps-script-cef15b82f684&#34;&gt;Best Practices for Discontinuous Cells on Google Spreadsheet by Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If these reports will be useful, I’m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - UtlApp</title>
      <link>https://tanaikech.github.io/2023/05/13/gas-library-utlapp/</link>
      <pubDate>Sat, 13 May 2023 15:52:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/05/13/gas-library-utlapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Google Apps Script library including useful scripts for supporting to development of applications by Google Apps Script. In the current stage, the 3 categories &amp;ldquo;For array processing&amp;rdquo;, &amp;ldquo;For binary processing&amp;rdquo;, and &amp;ldquo;For string processing&amp;rdquo; are included in this library.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230513a/fig1.png&#34;&#xA;     alt=&#34;GAS Library - UtlApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When I create applications using Google Apps Script, there are useful scripts for often use. At that time, I thought that when those scripts can be simply used, they will be useful not only to me but also to other users. From this motivation, I created a Google Apps Script library including those scripts. But, I have been using these useful scripts only in my development before.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unpivot on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/05/11/unpivot-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Thu, 11 May 2023 11:36:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/05/11/unpivot-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/05e5fd84561080e484bd4df799862f01&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230511a/fig1.png&#34;&#xA;     alt=&#34;Unpivot on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting the values on Google Spreadsheet as unpivot (reverse pivot) using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-1&#34;&gt;Sample script 1:&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SAMPLE1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ([[, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;], ...&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;]) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;flatMap&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;) =&amp;gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]]));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;In the sample, the source data is &amp;ldquo;A1:D8&amp;rdquo;. And, a custom function of &lt;code&gt;=SAMPLE1(A1:D8)&lt;/code&gt; is put into &amp;ldquo;F1&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;When this script is used, the result showing the above image (most left table to middle table) is obtained.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sample-script-2&#34;&gt;Sample script 2:&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SAMPLE2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;]));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Set&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;)];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rh&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Set&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;)];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rh&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...Array(Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;ceil&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;))].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;splice&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [[&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;rh&lt;/span&gt;], ...&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;vv&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;], ...&lt;span style=&#34;color:#a6e22e&#34;&gt;vv&lt;/span&gt;])];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;]));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;In the sample, the source data is &amp;ldquo;F1:H21&amp;rdquo;. And, a custom function of &lt;code&gt;=SAMPLE2(F1:H21)&lt;/code&gt; is put into &amp;ldquo;J1&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;When this script is used, the result showing the above image (middle table to most right table) is obtained.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Best Practices for Discontinuous Cells on Google Spreadsheet by Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/05/01/best-practices-for-discontinuous-cells-on-google-spreadsheet-by-google-apps-script/</link>
      <pubDate>Mon, 01 May 2023 09:18:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/05/01/best-practices-for-discontinuous-cells-on-google-spreadsheet-by-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dba916ae25f7351819e062b42bb5be10&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;It has already been known that Google Apps Script is a strong tool for managing Google Spreadsheets. When the values are retrieved and/or put for Google Spreadsheet, there is a case that the discontinuous cells are required to be used. This report suggests the Best Practices for processing the discontinuous cells on Google Spreadsheet. From the results of process costs, it could understand the usefulness of using the discontinuous cells with low cost using Sheets API and Class RangeList of Spreadsheet service with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been published at Champion Innovators Content Library</title>
      <link>https://tanaikech.github.io/2023/04/20/my-report-has-been-published-at-champion-innovators-content-library/</link>
      <pubDate>Thu, 20 Apr 2023 16:57:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/04/20/my-report-has-been-published-at-champion-innovators-content-library/</guid>
      <description>&lt;p&gt;My report has been published at &lt;a href=&#34;https://cloud.google.com/innovators/champions/content#/?q=tanaike&#34;&gt;Champion Innovators Content Library&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tanaikech.github.io/2023/04/02/enriched-management-of-rich-text-on-google-spreadsheet-using-google-apps-script/&#34;&gt;Enriched Management of Rich Text on Google Spreadsheet using Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If these reports will be useful, I’m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Putting Image into Cell of Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/04/17/putting-image-into-cell-of-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 17 Apr 2023 09:41:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/04/17/putting-image-into-cell-of-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c18715b68a81a8492a13140d9cd3bb6f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230417a/fig1.gif&#34;&#xA;     alt=&#34;Putting Image into Cell of Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;These are sample scripts for putting an image into a cell of a Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-1&#34;&gt;Sample 1&lt;/h2&gt;&#xA;&lt;p&gt;In this sample, the image is put into a cell using &lt;code&gt;thumbnailLink&lt;/code&gt; retrieved by Drive API. So, when you test this, please enable Drive API at Advanced Google services. The image is put into cell &amp;ldquo;A1&amp;rdquo;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sample1&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the file ID of the PNG image file on Google Drive.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Drive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;thumbnailLink&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=s220&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=s1000&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newCellImage&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;setSourceUrl&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;build&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setValue&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getValue&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getUrl&lt;/span&gt;()); &lt;span style=&#34;color:#75715e&#34;&gt;// ---&amp;gt; null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentUrl&lt;/span&gt;()); &lt;span style=&#34;color:#75715e&#34;&gt;// --&amp;gt; Exception: Unexpected error while getting the method or property getContentUrl on object SpreadsheetApp.CellImage.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-2&#34;&gt;Sample 2&lt;/h2&gt;&#xA;&lt;p&gt;In this sample, the image is put into a cell using the data URL. The image is put into cell &amp;ldquo;A1&amp;rdquo;. In this case, I believe that when the data URL is used, this method will be able to be used for various situations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Automatically Installing OnEdit Trigger to Copied Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/04/10/workaround-automatically-installing-onedit-trigger-to-copied-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 10 Apr 2023 11:16:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/04/10/workaround-automatically-installing-onedit-trigger-to-copied-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/76bab12742174976d87e2473ae7975f8&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a workaround for automatically installing the OnEdit trigger to the copied Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The sample situation for this workaround is as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You have a Google Spreadsheet.&lt;/li&gt;&#xA;&lt;li&gt;Your Spreadsheet is shared with a user as the writer.&lt;/li&gt;&#xA;&lt;li&gt;Your Spreadsheet has a button for executing a script for copying the active Spreadsheet.&lt;/li&gt;&#xA;&lt;li&gt;Your Spreadsheet has a function &lt;code&gt;installedOnEdit&lt;/code&gt; for executing by the installable OnEdit trigger.&lt;/li&gt;&#xA;&lt;li&gt;You want to make the user copy the active Spreadsheet by clicking the button, and also, you want to automatically install the OnEdit trigger to &lt;code&gt;installedOnEdit&lt;/code&gt; for the copied Spreadsheet, simultaneously.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This method is from &amp;ldquo;&lt;a href=&#34;https://tanaikech.github.io/2023/01/25/using-onedit-trigger-to-google-spreadsheet-by-hiding-google-apps-script-from-other-users/&#34;&gt;Using OnEdit Trigger to Google Spreadsheet by Hiding Google Apps Script from Other Users (Author: me)&lt;/a&gt;&amp;rdquo; and &amp;ldquo;&lt;a href=&#34;https://tanaikech.github.io/2023/01/25/using-onedit-trigger-on-google-spreadsheet-created-by-service-account/&#34;&gt;Using OnEdit trigger on Google Spreadsheet Created by Service Account (Author: me)&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v203</title>
      <link>https://tanaikech.github.io/2023/04/05/updated-goodls-to-v203/</link>
      <pubDate>Wed, 05 Apr 2023 10:50:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/04/05/updated-goodls-to-v203/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.3 (April 5, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Forgot to update the version number and modified it. And, built the sources with the latest version. &lt;a href=&#34;https://github.com/tanaikech/goodls/releases/tag/v2.0.3&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Putting TOTP into Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/04/04/putting-totp-into-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Tue, 04 Apr 2023 13:44:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/04/04/putting-totp-into-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4de7448903389e0884e2a21cd27abc86&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230404a/fig1.gif&#34;&#xA;     alt=&#34;Putting TOTP into Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this post, I would like to introduce a sample script for putting Time-based One-time Password (TOTP) value into Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, I used a Javascript library of &lt;a href=&#34;https://github.com/hectorm/otpauth&#34;&gt;https://github.com/hectorm/otpauth&#xA;&lt;/a&gt;. In the current stage, Google Apps Script can run with V8 runtime. By this, it seems that this library can be used with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enriched Management of Rich Text on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/04/02/enriched-management-of-rich-text-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Sun, 02 Apr 2023 12:36:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/04/02/enriched-management-of-rich-text-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8082e2bb265d2ad4bd61f9d418504811&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/RichTextAssistant/raw/master/images/fig1.png&#34;&#xA;     alt=&#34;Enriched Management of Rich Text on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, Google Spreadsheet can use rich texts in cells. The rich texts can be also managed by Google Apps Script. But, I thought that creating a script for editing the existing rich text in the cell might be a bit complicated. Because, for example, in the current stage, when the text of the rich text of a cell is changed using a script, all text styles are cleared. In order to add and delete a text for the rich text in a cell, it is required to create a script while the current text style is kept. This is actually complicated. In this post, I would like to introduce the enriched management of rich text on Google Spreadsheet using Google Apps Script. In order to enrich the management of Rich Text using Google Apps Script, I created a library &lt;a href=&#34;https://github.com/tanaikech/RichTextAssistant&#34;&gt;RichTextAssistant&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - RichTextAssistant</title>
      <link>https://tanaikech.github.io/2023/04/02/gas-library-richtextassistant/</link>
      <pubDate>Sun, 02 Apr 2023 12:20:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/04/02/gas-library-richtextassistant/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/RichTextAssistant/raw/master/images/fig1.png&#34;&#xA;     alt=&#34;GAS Library - RichTextAssistant&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a GAS library for supporting editing RichText in Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;There is &lt;a href=&#34;https://github.com/tanaikech/RichTextApp&#34;&gt;RichTextApp&lt;/a&gt; in my published libraries. RichTextApp can be used mainly for converting RichText to Google Documents and vice versa. This library RichTextAssistant will support editing the rich text in Google Spreadsheets using Google Apps Script. Google Spreadsheet can use rich text as the cell value using Google Apps Script. But, I thought that when I created a script for editing the existing rich text in the cell, it might be a bit complicated. Because, for example, in the current stage, when the text of rich text of a cell is changed using a script, all text styles are cleared. In order to add and delete a text for the rich text in a cell, it is required to create a script while the current text style is kept. This is actually complicated. From this situation, when a script for supporting editing the rich text in a cell is published, it will be useful for a lot of users. So, I created it and published it as &amp;ldquo;RichTextAssistant&amp;rdquo; of a Google Apps Script library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Folder Picker using jsTree with Google Apps Script and Javascript</title>
      <link>https://tanaikech.github.io/2023/03/23/folder-picker-using-jstree-with-google-apps-script-and-javascript/</link>
      <pubDate>Thu, 23 Mar 2023 09:48:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/03/23/folder-picker-using-jstree-with-google-apps-script-and-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/10edba76a0273c71368b3699d5f64b62&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230323a/fig1.gif&#34;&#xA;     alt=&#34;Folder Picker using jsTree with Google Apps Script and Javascript&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for the folder picker using &lt;a href=&#34;https://www.jstree.com/&#34;&gt;jsTree&lt;/a&gt; with Google Apps Script and Javascript.&lt;/p&gt;&#xA;&lt;p&gt;I have already published &amp;ldquo;&lt;a href=&#34;http://localhost:1313/2021/10/25/file-picker-using-google-apps-script-and-javascript-without-3rd-party/&#34;&gt;File Picker using Google Apps Script and Javascript without 3rd party&lt;/a&gt;&amp;rdquo;. In this post, jsTree is used.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-install-google-apps-script-library&#34;&gt;1. Install Google Apps Script library.&lt;/h3&gt;&#xA;&lt;p&gt;In this script, &amp;ldquo;&lt;a href=&#34;https://github.com/tanaikech/FilesApp&#34;&gt;FilesApp&lt;/a&gt;&amp;rdquo; of my Google Apps Script library is used. So, please install it. You can see how to install it at &lt;a href=&#34;https://github.com/tanaikech/FilesApp#how-to-install&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Process Costs for Searching Value using Object with Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/03/15/benchmark-process-costs-for-searching-value-using-object-with-google-apps-script/</link>
      <pubDate>Wed, 15 Mar 2023 16:24:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/03/15/benchmark-process-costs-for-searching-value-using-object-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e4fcca733a78f7211d80967ac4a35adb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When a value is searched from the 1-dimensional array and a 2-dimensional array, after V8 runtime could be used, I use JSON object, Set object, and Map Object. But, I had never measured the process cost of this situation. In this post, I would like to introduce the process cost for searching a value using a JSON object, Set object, and Map object converted from the 1-dimensional array and 2-dimensional array.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Importing Microsoft Excel to Google Spreadsheet using Custom Function with Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/03/13/importing-microsoft-excel-to-google-spreadsheet-using-custom-function-with-google-apps-script/</link>
      <pubDate>Mon, 13 Mar 2023 14:31:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/03/13/importing-microsoft-excel-to-google-spreadsheet-using-custom-function-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/742c9f8baf488503a66582b985b9d4e5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230313a/fig1.png&#34;&#xA;     alt=&#34;Importing Microsoft Excel to Google Spreadsheet using Custom Function with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for importing Microsoft Excel (XLSX) data to Google Spreadsheet using a custom function with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-install-sheetjs-library&#34;&gt;1. Install SheetJS library.&lt;/h3&gt;&#xA;&lt;p&gt;Please copy the script of the SheetJS library from &lt;a href=&#34;https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js&#34;&gt;https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js&lt;/a&gt;, and paste the script to the script editor of Google Spreadsheet, and save the script.&lt;/p&gt;&#xA;&lt;p&gt;In this case, I would like to recommend the following flow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Directly Retrieving Values from XLSX data using SheetJS with Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/03/12/directly-retrieving-values-from-xlsx-data-using-sheetjs-with-google-apps-script/</link>
      <pubDate>Sun, 12 Mar 2023 12:41:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/03/12/directly-retrieving-values-from-xlsx-data-using-sheetjs-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7647ac0d4faa8fffb78ff2324be8435c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updated on July 8, 2023&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, unfortunately, the built-in methods of Google Apps Script cannot directly retrieve the values from the XLSX data. From this situation, I have created &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp&#34;&gt;DocsServiceApp&lt;/a&gt;. When this Google Apps Script library is used, the values are directly retrieved from XLSX data by parsing XML data of XLSX data.&lt;/p&gt;&#xA;&lt;p&gt;Here, as another approach, I would like to introduce a sample script for directly retrieving the values from XLSX data using &lt;a href=&#34;https://docs.sheetjs.com/docs/&#34;&gt;SheetJS&lt;/a&gt; with Google Apps Script. In the current stage, Google Apps Script can run with V8 runtime. By this, it seems that SheetJS can be used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Removing Quote Prefix of Cell value using Google Apps Script (Single Quote)</title>
      <link>https://tanaikech.github.io/2023/03/11/removing-quote-prefix-of-cell-value-using-google-apps-script-single-quote/</link>
      <pubDate>Sat, 11 Mar 2023 14:27:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/03/11/removing-quote-prefix-of-cell-value-using-google-apps-script-single-quote/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ec156204f3a2d96873dce5f6ba4674d6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230311a/fig1.png&#34;&#xA;     alt=&#34;Removing Quote Prefix of Cell value using Google Apps Script (Single Quote)&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In Google Spreadsheet, when a single quote is added to the top letter of the cell value, the cell is used as the text value. About detecting this, I have already reported in &lt;a href=&#34;https://tanaikech.github.io/2022/09/28/retrieving-cell-coordinates-of-cells-with-quote-prefix-using-google-apps-script-single-quote/&#34;&gt;this post in my blog&lt;/a&gt;. In this post, I would like to introduce a sample script for removing the single quote at the top character of the cell value.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Split Binary Data with Search Data using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/03/08/split-binary-data-with-search-data-using-google-apps-script/</link>
      <pubDate>Wed, 08 Mar 2023 11:39:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/03/08/split-binary-data-with-search-data-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1d406d997090888cfacdb8e9d295ba34&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for splitting the binary data with search data using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * Split byteArray by a search data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {Array} baseData Input byteArray of base data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {Array} searchData Input byteArray of search data using split.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @return {Array} An array including byteArray.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;splitByteArrayBySearchData_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;baseData&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;searchData&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;isArray&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;baseData&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;isArray&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;searchData&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Please give byte array.&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;search&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;searchData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bLen&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;searchData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;baseData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;findIndex&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;) =&amp;gt; [...Array(&lt;span style=&#34;color:#a6e22e&#34;&gt;bLen&lt;/span&gt;)].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]).&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;search&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;baseData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;splice&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;baseData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;splice&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;bLen&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;baseData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;splice&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sampleString&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;abc123def123ghi123jkl&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;splitValue&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;123&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;splitByteArrayBySearchData&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ...[&lt;span style=&#34;color:#a6e22e&#34;&gt;sampleString&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;splitValue&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBytes&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getDataAsString&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res1&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// [[97,98,99],[100,101,102],[103,104,105],[106,107,108]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res2&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// [&amp;#34;abc&amp;#34;,&amp;#34;def&amp;#34;,&amp;#34;ghi&amp;#34;,&amp;#34;jkl&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When &lt;code&gt;main()&lt;/code&gt; is run, the sample input values of &lt;code&gt;&amp;quot;abc123def123ghi123jkl&amp;quot;&lt;/code&gt; is split by &lt;code&gt;&amp;quot;123&amp;quot;&lt;/code&gt;. And, &lt;code&gt;[[97,98,99],[100,101,102],[103,104,105],[106,107,108]]&lt;/code&gt; is obtained. In this case, when &lt;code&gt;[[97,98,99],[100,101,102],[103,104,105],[106,107,108]]&lt;/code&gt; is converted to the string for confirming the result value, it becomes &lt;code&gt;[&amp;quot;abc&amp;quot;,&amp;quot;def&amp;quot;,&amp;quot;ghi&amp;quot;,&amp;quot;jkl&amp;quot;]&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exporting Google Docs Files in PDF format with Batch Requests using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/03/08/exporting-google-docs-files-in-pdf-format-with-batch-requests-using-google-apps-script/</link>
      <pubDate>Wed, 08 Mar 2023 11:23:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/03/08/exporting-google-docs-files-in-pdf-format-with-batch-requests-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d65d9608e6dd108a0fed31604e7556e7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for exporting Google Docs files (Spreadsheets, Documents, and so on) in PDF format with batch requests using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;I have published a report &lt;a href=&#34;https://cloud.google.com/blog/topics/developers-practitioners/efficient-file-management-using-batch-requests-google-apps-script&#34;&gt;“Efficient File Management using Batch Requests with Google Apps Script”&lt;/a&gt;. In this report, I mentioned how to use the batch requests using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I would like to introduce the method for retrieving binary data using this method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - BatchRequest</title>
      <link>https://tanaikech.github.io/2023/03/08/updated-gas-library-batchrequest/</link>
      <pubDate>Wed, 08 Mar 2023 11:12:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/03/08/updated-gas-library-batchrequest/</guid>
      <description>&lt;h2 id=&#34;batchrequest-was-updated-to-v121&#34;&gt;BatchRequest was updated to v1.2.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.1 (March 8, 2023)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;An option of &lt;code&gt;exportDataAsBlob&lt;/code&gt; was added to the request object to the method of &lt;code&gt;EDo()&lt;/code&gt;. &lt;a href=&#34;https://github.com/tanaikech/BatchRequest#method-edo&#34;&gt;Ref&lt;/a&gt; When this option is used, the response values from the batch requests are returned as Blob. By this, for example, when you export Google Spreadsheet as PDF data using the batch requests, the PDF data can be retrieved as Blob.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sample-script-using-exportdataasblob&#34;&gt;Sample script using &lt;code&gt;exportDataAsBlob&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In this sample, the Spreadsheet and Document files are exported as PDF format using the batch requests. The exported PDF data is created as a PDF file to the root folder. When I answered &lt;a href=&#34;https://stackoverflow.com/q/75661391&#34;&gt;this thread on Stackoverflow&lt;/a&gt;, when this option is added to this library, I thought that it might be useful for users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resumable Download of File from Google Drive using Drive API with Python</title>
      <link>https://tanaikech.github.io/2023/02/28/resumable-download-of-file-from-google-drive-using-drive-api-with-python/</link>
      <pubDate>Tue, 28 Feb 2023 11:58:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/02/28/resumable-download-of-file-from-google-drive-using-drive-api-with-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dfdad37859d591526b2fba8fb4390cf5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for achieving the resumable download of a file from Google Drive using Dive API with Python.&lt;/p&gt;&#xA;&lt;p&gt;There might be a case in that you want to achieve the resumable download of a file from Google Drive using Dive API with Python. For example, when a large file is downloaded, the downloading might be stopped in the middle of downloading. At that time, you might want to resume the download. In this post, I would like to introduce the sample script of python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Total File Sizes in Specific Folder of Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/02/24/retrieving-total-file-sizes-in-specific-folder-of-google-drive-using-google-apps-script/</link>
      <pubDate>Fri, 24 Feb 2023 14:25:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/02/24/retrieving-total-file-sizes-in-specific-folder-of-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bbf37f05f5f5a98d346295f6e4aa3c48&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the total file sizes in the specific folder of Google Drive using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;There is a case where you want to retrieve the total file sizes in the specific folder of Google Drive using Google Apps Script. In this post, I would like to introduce a sample script for achieving this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Before you use this script, please enable Drive API at Advanced Google services. And please install &lt;a href=&#34;https://github.com/tanaikech/FilesApp&#34;&gt;FilesApp&lt;/a&gt; of a Google Apps Script library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Start and End Row Numbers of Same Values in a Column on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/02/23/retrieving-start-and-end-row-numbers-of-same-values-in-a-column-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Thu, 23 Feb 2023 17:19:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/02/23/retrieving-start-and-end-row-numbers-of-same-values-in-a-column-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/eca18c3ccff32065dbe60d5385dd51ab&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230223a/fig1.png&#34;&#xA;     alt=&#34;Retrieving Start and End Row Numbers of Same Values in a Column on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the start and end row numbers of the same values in a column on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;There is a case in that I want to retrieve the rows of the same values in a column on Google Spreadsheet using Google Apps Script. In this post, I would like to introduce a simple sample script for achieving this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Until Expiration Time of Access Token Retrieved By googleapis for Python</title>
      <link>https://tanaikech.github.io/2023/02/16/using-until-expiration-time-of-access-token-retrieved-by-googleapis-for-python/</link>
      <pubDate>Thu, 16 Feb 2023 15:05:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/02/16/using-until-expiration-time-of-access-token-retrieved-by-googleapis-for-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b2d877e4e4d274b17876191d48204882&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When Google APIs are used with &lt;a href=&#34;https://github.com/googleapis/google-api-python-client&#34;&gt;googleapis for Python&lt;/a&gt;, the client is obtained as follows.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;creds &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; service_account&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Credentials&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;from_service_account_file(service_account_credential_file, scopes&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;scopes)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;service &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; build(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;drive&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;v3&amp;#34;&lt;/span&gt;, credentials&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;creds)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this case, when the script is run, the access token is retrieved every time. But, the expiration time of the retrieved access token is 1 hour. Here, there might be the case that you want to use the access token until the expiration time. It is considered that effectively using the access token will lead to SDGs. In this post, I would like to introduce a sample script for using the access token until the expiration time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Issue of HTML form with Input tab of Type File with google.script.run</title>
      <link>https://tanaikech.github.io/2023/02/15/issue-of-html-form-with-input-tab-of-type-file-with-google.script.run/</link>
      <pubDate>Wed, 15 Feb 2023 21:30:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/02/15/issue-of-html-form-with-input-tab-of-type-file-with-google.script.run/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9590b01e4d363d724c458b5cbc87d041&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Today, I discussed with Riël Notermans an issue with the HTML form with the input tab of &lt;code&gt;type=&amp;quot;file&amp;quot;&lt;/code&gt; with &lt;code&gt;google.script.run&lt;/code&gt;. Through this discussion, the reason for this issue could be found. When you use the input tab of &lt;code&gt;type=&amp;quot;file&amp;quot;&lt;/code&gt; in the HTML form, and you want to send the file content with &lt;code&gt;google.script.run&lt;/code&gt;, I thought that this post might be useful for other users. So, I posted it here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Access Token from Service Account using oauth2client and google-auth with Python</title>
      <link>https://tanaikech.github.io/2023/02/15/retrieving-access-token-from-service-account-using-oauth2client-and-google-auth-with-python/</link>
      <pubDate>Wed, 15 Feb 2023 14:46:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/02/15/retrieving-access-token-from-service-account-using-oauth2client-and-google-auth-with-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5196ed237812192539c4369000bc131b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the access token from the service account using oauth2client and google-auth with Python.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-1&#34;&gt;Sample script 1&lt;/h2&gt;&#xA;&lt;p&gt;Use &lt;code&gt;oauth2client&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; oauth2client.service_account &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; ServiceAccountCredentials&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SERVICE_ACCOUNT_FILE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;credentials.json&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SCOPES &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/auth/drive&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;creds &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ServiceAccountCredentials&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;from_json_keyfile_name(SERVICE_ACCOUNT_FILE, scopes&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;SCOPES)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; creds&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_access_token()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;access_token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; res&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;access_token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(access_token)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-script-2&#34;&gt;Sample script 2&lt;/h2&gt;&#xA;&lt;p&gt;Use &lt;code&gt;google-auth&lt;/code&gt;. In the current stage, this method might be general.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; google.oauth2 &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; service_account&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; google.auth.transport.requests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SERVICE_ACCOUNT_FILE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;credentials.json&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SCOPES &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/auth/drive&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;creds &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; service_account&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Credentials&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;from_service_account_file(SERVICE_ACCOUNT_FILE, scopes&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;SCOPES)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;request &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; google&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;auth&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;transport&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Request()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;creds&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;refresh(request)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;access_token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; creds&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(access_token)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://oauth2client.readthedocs.io/en/latest/source/oauth2client.service_account.html&#34;&gt;oauth2client.service_account module&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://google-auth.readthedocs.io/en/master/reference/google.oauth2.service_account.html&#34;&gt;google.oauth2.service_account module&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://google-auth.readthedocs.io/en/master/reference/google.auth.transport.requests.html&#34;&gt;google.auth.transport.requests module&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>February 15, 2023: Decrypting Salted Base64 of finance.yahoo.com using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/02/15/february-15-2023-decrypting-salted-base64-of-finance.yahoo.com-using-google-apps-script/</link>
      <pubDate>Wed, 15 Feb 2023 11:40:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/02/15/february-15-2023-decrypting-salted-base64-of-finance.yahoo.com-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/84213e047bc64b50deb7295758e0d971&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script decrypts the salted base64 data of finance.yahoo.com using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, it seems that the specification of the key for decrypting the data has been changed on the server side, again. In this update, I looked for the logic for retrieving the key value. But, I cannot still find it. So, in this post, I would like to use a workaround discussed in &lt;a href=&#34;https://github.com/ranaroussi/yfinance/issues/1407&#34;&gt;this thread&lt;/a&gt;. In this thread, the valid keys are listed in a text file. Using this, I updated the script as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Putting Values of All Spreadsheets in Folder to Master Spreadsheet with Low Process cost using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/02/03/putting-values-of-all-spreadsheets-in-folder-to-master-spreadsheet-with-low-process-cost-using-google-apps-script/</link>
      <pubDate>Fri, 03 Feb 2023 14:20:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/02/03/putting-values-of-all-spreadsheets-in-folder-to-master-spreadsheet-with-low-process-cost-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e65100d2f13c9c6903e1a6c86184d663&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230203a/fig1.png&#34;&#xA;     alt=&#34;Putting Values of All Spreadsheets in Folder to Master Spreadsheet with Low Process cost using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for putting the values of all Spreadsheets in a folder to the master Spreadsheet with a low process cost using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;There is a case in that I want to collect the values from multiple Spreadsheets and put the values into the master Spreadsheet. When this situation is achieved by Google Apps Script, as the general method, the values are required to be retrieved from each Spreadsheet in a loop. In the current stage, even when Sheets API is used, the values cannot be retrieved from multiple Spreadsheets by one API call. In this report, I would like to introduce the method for achieving this with the low process cost using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Retrieving Hyperlink from Cell of Number Value using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/01/31/workaround-retrieving-hyperlink-from-cell-of-number-value-using-google-apps-script/</link>
      <pubDate>Tue, 31 Jan 2023 16:15:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/31/workaround-retrieving-hyperlink-from-cell-of-number-value-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/82a74e64abcacabd51be8ff92c73691a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a workaround for retrieving the hyperlink from the cell of a number value using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;As a sample situation, it supposes that a cell &amp;ldquo;A1&amp;rdquo; has a number value like &lt;code&gt;123&lt;/code&gt;, and a hyperlink of &lt;code&gt;https://tanaikech.github.io&lt;/code&gt; is set to the cell. In order to retrieve the hyperlink from the cell, it is required to use the methods of &lt;code&gt;getRichTextValue()&lt;/code&gt; and &lt;code&gt;getRichTextValues()&lt;/code&gt;. But, in the current stage, when the cell value is a number value, when the RichText is retrieved by &lt;code&gt;getRichTextValue()&lt;/code&gt;, &lt;code&gt;null&lt;/code&gt; is returned. By this, unfortunately, the hyperlink of the cell cannot be retrieved. This has already been reported in the Google issue tracker. &lt;a href=&#34;https://issuetracker.google.com/issues/158393310&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been published at Champion Innovators Content Library</title>
      <link>https://tanaikech.github.io/2023/01/31/my-report-has-been-published-at-champion-innovators-content-library/</link>
      <pubDate>Tue, 31 Jan 2023 10:38:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/31/my-report-has-been-published-at-champion-innovators-content-library/</guid>
      <description>&lt;p&gt;My report has been published at &lt;a href=&#34;https://cloud.google.com/innovators/champions/content#/?q=tanaike&#34;&gt;Champion Innovators Content Library&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tanaikech.github.io/2022/11/13/uploading-video-file-on-google-drive-to-youtube-with-resumable-upload-using-google-apps-script/&#34;&gt;Uploading Video File on Google Drive to YouTube with Resumable Upload using Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If these reports will be useful, I’m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>January 27, 2023: Decrypting Salted Base64 of finance.yahoo.com using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/01/27/january-27-2023-decrypting-salted-base64-of-finance.yahoo.com-using-google-apps-script/</link>
      <pubDate>Fri, 27 Jan 2023 10:33:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/27/january-27-2023-decrypting-salted-base64-of-finance.yahoo.com-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2b1c008d7f8e873cc738d75c7fefaf71&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script decrypts the salted base64 data of finance.yahoo.com using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, it seems that the specification of the key for decrypting the data has been changed at the server side. So. from &lt;a href=&#34;https://github.com/ranaroussi/yfinance/blob/e1184f745be695ab21e8b969b8e6912da548debd/yfinance/data.py&#34;&gt;this script&lt;/a&gt;, I updated the script as follows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Load crypto-js.min.js.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  eval(&lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Retrieve HTML and retrieve salted base64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://finance.yahoo.com/quote/PGEN/press-releases&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// This is a sample URL.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/root.App.main = ([\s\S\w]+?);\n/&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;trim&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;typeof&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dispatcher&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stores&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dispatcher&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stores&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;instanceof&lt;/span&gt; String&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Decrypt the salted base64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Map&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;entries&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          .&lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt;(([&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;]) =&amp;gt; &lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;context&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;plugins&amp;#34;&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          .&lt;span style=&#34;color:#a6e22e&#34;&gt;splice&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ).&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ].&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Specification at the server side might be changed. Please check it.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;CryptoJS&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;enc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Utf8&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;CryptoJS&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AES&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;decrypt&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dispatcher&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stores&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dispatcher&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stores&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;About the value of &lt;code&gt;context.dispatcher.stores&lt;/code&gt;, this script can be used for both the salted base64 and the JSON object.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In this sample, in order to load &lt;code&gt;crypto-js&lt;/code&gt;, &lt;code&gt;eval(UrlFetchApp.fetch(cdnjs).getContentText())&lt;/code&gt; is used. But, if you don&amp;rsquo;t want to use it, you can also use this script by copying and pasting the script of &lt;code&gt;https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js&lt;/code&gt; to the script editor of Google Apps Script. By this, the process cost can be reduced.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;important&#34;&gt;IMPORTANT&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;I can confirm that this method can be used for the current situation (January 27, 2023). But, when the specification in the data and HTML is changed in the future update on the server side, this script might not be able to be used. Please be careful about this.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/brix/crypto-js&#34;&gt;crypto-js&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://cdnjs.com/libraries/crypto-js&#34;&gt;crypto-js of cdnjs.com&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tanaikech.github.io/2022/12/21/encrypting-and-decrypting-with-aes-using-crypto-js-with-google-apps-script/&#34;&gt;Encrypting and Decrypting with AES using crypto-js with Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I answered this method to the following threads on Stackoverflow.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/q/75250562&#34;&gt;https://stackoverflow.com/q/75250562&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Using OnEdit trigger on Google Spreadsheet Created by Service Account</title>
      <link>https://tanaikech.github.io/2023/01/25/using-onedit-trigger-on-google-spreadsheet-created-by-service-account/</link>
      <pubDate>Wed, 25 Jan 2023 12:01:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/25/using-onedit-trigger-on-google-spreadsheet-created-by-service-account/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/58891b5caaf49ebfdb5f8dde4637d8e6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, by the current specification, Google Apps Script cannot be directly run on Google Spreadsheet created by Service Account. But, there is a case in that we want to use the OnEdit trigger on the Spreadsheet that the service account is the owner. In this post, I would like to introduce the method for achieving this.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I published &amp;ldquo;&lt;a href=&#34;https://tanaikech.github.io/2023/01/25/using-onedit-trigger-to-google-spreadsheet-by-hiding-google-apps-script-from-other-users/&#34;&gt;Using OnEdit Trigger to Google Spreadsheet by Hiding Google Apps Script from Other Users&lt;/a&gt;&amp;rdquo;. Here, this method is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using OnEdit Trigger to Google Spreadsheet  by Hiding Google Apps Script from Other Users</title>
      <link>https://tanaikech.github.io/2023/01/25/using-onedit-trigger-to-google-spreadsheet-by-hiding-google-apps-script-from-other-users/</link>
      <pubDate>Wed, 25 Jan 2023 09:42:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/25/using-onedit-trigger-to-google-spreadsheet-by-hiding-google-apps-script-from-other-users/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/848fea29875d5034a2347a5a16306215&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230126a/fig1.png&#34;&#xA;     alt=&#34;Using OnEdit Trigger to Google Spreadsheet  by Hiding Google Apps Script from Other Users&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a method for using OnEdit Trigger to Google Spreadsheet by hiding Google Apps Script from other users.&lt;/p&gt;&#xA;&lt;p&gt;A sample flow for achieving this is as follows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;flow&#34;&gt;Flow&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-create-a-new-google-spreadsheet&#34;&gt;1. Create a new Google Spreadsheet.&lt;/h3&gt;&#xA;&lt;p&gt;Please create a new Google Spreadsheet. In this flow, this Google Spreadsheet is used for testing the script. And, please copy the Spreadsheet ID. This spreadsheet ID is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing U&#43;00A0 with U&#43;0020 as Unicode using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/01/23/replacing-u-00a0-with-u-0020-as-unicode-using-google-apps-script/</link>
      <pubDate>Mon, 23 Jan 2023 08:45:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/23/replacing-u-00a0-with-u-0020-as-unicode-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cc470a3b6c49b32e06d908e6d3f96f66&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230123a/fig1.png&#34;&#xA;     alt=&#34;Replacing U&amp;#43;00A0 with U&amp;#43;0020 as Unicode using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for checking and replacing a character of U+00A0 (no-break space) with U+0020 (space) as Unicode using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When I&amp;rsquo;m seeing the questions on Stackoverflow, I sometimes saw the situation that the script doesn&amp;rsquo;t work while the script is correct. In this case, there is the case that the reason is due to U+00A0 being used as the spaces. When U+00A0 is used as the spaces, Google Apps Script and formulas cannot be correctly run. I thought that when this information is published, it might be useful for a lot of users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Set Line Space of Paragraph on Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/01/20/set-line-space-of-paragraph-on-google-document-using-google-apps-script/</link>
      <pubDate>Fri, 20 Jan 2023 14:34:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/20/set-line-space-of-paragraph-on-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ea68371c1f212d316a8713946e9d8385&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for setting the line space of paragraphs on Google Documents using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When the line space of a paragraph on Google Documents is manually set, you can do it as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230120a/fig1.png&#34;&#xA;     alt=&#34;Set Line Space of Paragraph on Google Document using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;When it is set with Google Apps Script, the following script can be used.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sample1&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DocumentApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveDocument&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBody&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;paragraph&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;appendParagraph&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample paragraph 1\nsample paragraph 2\nsample paragraph 3&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;paragraph&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setLineSpacing&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// Double&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When this script is run, the appended paragraphs have a line space of 2 (Double).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Opening and Closing Google Forms on Time using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/01/18/opening-and-closing-google-forms-on-time-using-google-apps-script/</link>
      <pubDate>Wed, 18 Jan 2023 14:09:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/18/opening-and-closing-google-forms-on-time-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/84bd91f2927d8c8463b494f712eb1800&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230118a/fig1.png&#34;&#xA;     alt=&#34;Opening and Closing Google Forms on Time using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for opening and closing Google Forms on time using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In order to test this sample script, please do the following flow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-create-a-new-google-form&#34;&gt;1. Create a new Google Form.&lt;/h3&gt;&#xA;&lt;p&gt;Please create a new Google Form and set your sample questions. And, please open the script editor of Google Form.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-prepare-sample-script&#34;&gt;2. Prepare sample script.&lt;/h3&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Google Form. And, please set the values of &lt;code&gt;start&lt;/code&gt; and &lt;code&gt;end&lt;/code&gt; times you want.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decrypting Salted Base64 of finance.yahoo.com using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/01/14/decrypting-salted-base64-of-finance.yahoo.com-using-google-apps-script/</link>
      <pubDate>Sat, 14 Jan 2023 10:17:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/14/decrypting-salted-base64-of-finance.yahoo.com-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/82fdd9be47a0b73437b66889ce6a8913&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script decrypts the salted base64 data of finance.yahoo.com using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, it seems that the specification of the key for decrypting the data has been changed at the server side. So. in this post, &lt;a href=&#34;https://tanaikech.github.io/2022/12/21/decrypting-salted-base64-of-finance.yahoo.com-using-google-apps-script/&#34;&gt;this post&lt;/a&gt; is updated. About this specification, I checked &lt;a href=&#34;https://github.com/ranaroussi/yfinance/issues/1291&#34;&gt;this thread&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Load crypto-js.min.js.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  eval(&lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cdnjs&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Retrieve HTML and retrieve salted base64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://finance.yahoo.com/quote/PGEN/press-releases&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// This is a sample URL.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/root.App.main = ([\s\S\w]+?);\n/&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;trim&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;typeof&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dispatcher&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stores&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dispatcher&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stores&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;instanceof&lt;/span&gt; String&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Decrypt the salted base64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;entries&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;find&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ([&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;]) =&amp;gt; &lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;context&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;plugins&amp;#34;&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Specification at the server side might be changed. Please check it.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;CryptoJS&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;enc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Utf8&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;CryptoJS&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AES&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;decrypt&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dispatcher&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stores&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempObj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dispatcher&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stores&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;About the value of &lt;code&gt;context.dispatcher.stores&lt;/code&gt;, this script can be used for both the salted base64 and the JSON object.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In this sample, in order to load &lt;code&gt;crypto-js&lt;/code&gt;, &lt;code&gt;eval(UrlFetchApp.fetch(cdnjs).getContentText())&lt;/code&gt; is used. But, if you don&amp;rsquo;t want to use it, you can also use this script by copying and pasting the script of &lt;code&gt;https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js&lt;/code&gt; to the script editor of Google Apps Script. By this, the process cost can be reduced.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;important&#34;&gt;IMPORTANT&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;I can confirm that this method can be used for the current situation (January 14, 2023). But, when the specification in the data and HTML is changed in the future update on the server side, this script might not be able to be used. Please be careful about this.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/brix/crypto-js&#34;&gt;crypto-js&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://cdnjs.com/libraries/crypto-js&#34;&gt;crypto-js of cdnjs.com&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tanaikech.github.io/2022/12/21/encrypting-and-decrypting-with-aes-using-crypto-js-with-google-apps-script/&#34;&gt;Encrypting and Decrypting with AES using crypto-js with Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I answered this method to the following threads on Stackoverflow.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/q/75114850&#34;&gt;https://stackoverflow.com/q/75114850&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Converting All Pages in PDF File to PNG Images using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/01/11/converting-all-pages-in-pdf-file-to-png-images-using-google-apps-script/</link>
      <pubDate>Wed, 11 Jan 2023 11:09:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/11/converting-all-pages-in-pdf-file-to-png-images-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/94ff0713a7bfe2d3e43afbfe54611190&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230111a/fig1.png&#34;&#xA;     alt=&#34;Converting All Pages in PDF File to PNG Images using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting all pages in a PDF file to PNG images using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;I have already published &lt;a href=&#34;https://tanaikech.github.io/2023/01/10/merging-multiple-pdf-files-as-a-single-pdf-file-using-google-apps-script/&#34;&gt;&amp;ldquo;Merging Multiple PDF Files as a Single PDF File using Google Apps Script&amp;rdquo;&lt;/a&gt;. In this post, it was found that &lt;a href=&#34;https://pdf-lib.js.org/&#34;&gt;pdf-lib&lt;/a&gt; can be used with Google Apps Script. From this, in this post, I would like to propose a sample script for converting all pages in a PDF file to PNG images using Google Apps Script. This cannot be directly achieved with Google Apps Script. So, I thought that this might be useful for users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Merging Multiple PDF Files as a Single PDF File using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/01/10/merging-multiple-pdf-files-as-a-single-pdf-file-using-google-apps-script/</link>
      <pubDate>Tue, 10 Jan 2023 10:19:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/10/merging-multiple-pdf-files-as-a-single-pdf-file-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/449ff906b85be18977e47e0d5ea173d5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230110a/fig1.png&#34;&#xA;     alt=&#34;Merging Multiple PDF Files as a Single PDF File using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for merging multiple PDF files as a single PDF file using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, &lt;a href=&#34;https://pdf-lib.js.org/&#34;&gt;pdf-lib&lt;/a&gt; is used. In the current stage, it seems that this Javascript can be directly used with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-1&#34;&gt;Sample script 1&lt;/h2&gt;&#xA;&lt;p&gt;As a sample situation, please put multiple PDF files in your Google Drive. This sample merges those PDF files as a single PDF file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Transferring Owner of File to Other User using Google Apps Script</title>
      <link>https://tanaikech.github.io/2023/01/09/transferring-owner-of-file-to-other-user-using-google-apps-script/</link>
      <pubDate>Mon, 09 Jan 2023 15:04:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/09/transferring-owner-of-file-to-other-user-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/685929fd4e739c943ab0b4c53348a4af&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20230109a/fig1a.png&#34;&#xA;     alt=&#34;Transferring Owner of File to Other User using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for transferring the ownership of a file to another user using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, about the consumer account (gmail.com) the specification for transferring the ownership of a file has been changed as follows. &lt;a href=&#34;https://developers.google.com/drive/api/guides/manage-sharing#transfer-consumer-account&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The current owner initiates an ownership transfer by creating or updating the prospective new owner&amp;rsquo;s file permission. The permission must include these settings: role=writer, type=user, and pendingOwner=true. If the new owner is creating a permission for the prospective owner, an email notification is sent to the prospective new owner indicating that they&amp;rsquo;re being asked to assume ownership of the file.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;The new owner accepts the ownership transfer request by creating or updating their file permission. The permission must include these settings: role=owner and transferOwnership=true. If the new owner is creating a new permission, an email notification is sent to the previous owner indicating that ownership has been transferred.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;When this flow is reflected in the sample script, it becomes as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Start and End of Month in Year using Google Apps Script and Javascript</title>
      <link>https://tanaikech.github.io/2023/01/04/retrieving-start-and-end-of-month-in-year-using-google-apps-script-and-javascript/</link>
      <pubDate>Wed, 04 Jan 2023 10:48:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/04/retrieving-start-and-end-of-month-in-year-using-google-apps-script-and-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1153792b17ce29ae86c865e53c999375&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the start and end of the month in a year using Google Apps Script and Javascript.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2023&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set year you expect.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...Array(&lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;)].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Date(&lt;span style=&#34;color:#a6e22e&#34;&gt;year&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(([&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;]) =&amp;gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toDateString&lt;/span&gt;(), &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toDateString&lt;/span&gt;()]));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;testing&#34;&gt;Testing&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://jsfiddle.net/mLrhqwgo/&#34;&gt;https://jsfiddle.net/mLrhqwgo/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When this script is run, the following value is obtained with &lt;code&gt;console.log(res.map(([a, b]) =&amp;gt; [a.toDateString(), b.toDateString()]))&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sun Jan 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Tue Jan 31 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Wed Feb 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Tue Feb 28 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Wed Mar 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fri Mar 31 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sat Apr 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sun Apr 30 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Mon May 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Wed May 31 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Thu Jun 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fri Jun 30 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sat Jul 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Mon Jul 31 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Tue Aug 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Thu Aug 31 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fri Sep 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sat Sep 30 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sun Oct 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Tue Oct 31 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Wed Nov 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Thu Nov 30 2023&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fri Dec 01 2023&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sun Dec 31 2023&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Trend of google-apps-script Tag on Stackoverflow 2023</title>
      <link>https://tanaikech.github.io/2023/01/03/trend-of-google-apps-script-tag-on-stackoverflow-2023/</link>
      <pubDate>Tue, 03 Jan 2023 16:20:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2023/01/03/trend-of-google-apps-script-tag-on-stackoverflow-2023/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/526e5aaed047ca54ece491a2f465f923&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Published: January 3, 2023&lt;/p&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At Stackoverflow, a lot of people post questions and answers to the questions every day. There are various tags in Stackoverflow. A lot of discussions are performed at each tag. Their discussions bring important information and are much useful for a lot of people. As one of the tags, there is &amp;ldquo;google-apps-script&amp;rdquo;. I sometimes discuss the questions with that tag. When we see the discussions, we can notice that the discussions are changed and progressed over time, because &amp;ldquo;Google Apps Script&amp;rdquo; which is the origin of the tag is updated. This report thinks this change is the trend of the tag of &amp;ldquo;google-apps-script&amp;rdquo;. This trend includes the number of questions, questioners, answerers, and tags added to the tag of &amp;ldquo;google-apps-script&amp;rdquo;. The trend of the tag of &amp;ldquo;google-apps-script&amp;rdquo; is deeply related to the progression of Google Apps Script and the various applications for Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Filtering JSON object using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/12/27/filtering-json-object-using-google-apps-script/</link>
      <pubDate>Tue, 27 Dec 2022 10:15:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/12/27/filtering-json-object-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d80131e89ed5025bbd40fe19b9e43beb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a simple sample script for filtering JSON objects using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, V8 runtime can be used with Google Apps Script. By this, when you want to filter a JSON object, you can use the following sample script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;In this sample script, &lt;code&gt;obj&lt;/code&gt; is filtered by the value of the even number.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key4&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;fromEntries&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;entries&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt;(([, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;]) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// {&amp;#34;key2&amp;#34;:2,&amp;#34;key4&amp;#34;:4}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When &lt;code&gt;v % 2 == 0&lt;/code&gt; is modified to &lt;code&gt;v % 2 == 1&lt;/code&gt;, you can filter the JSON object with the odd number like &lt;code&gt;{&amp;quot;key1&amp;quot;:1,&amp;quot;key3&amp;quot;:3,&amp;quot;key5&amp;quot;:5}&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decrypting Salted Base64 of finance.yahoo.com using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/12/21/decrypting-salted-base64-of-finance.yahoo.com-using-google-apps-script/</link>
      <pubDate>Wed, 21 Dec 2022 16:15:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/12/21/decrypting-salted-base64-of-finance.yahoo.com-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2c13c70e932e84adcf658ca8334f25ab&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script decrypts the salted base64 data of finance.yahoo.com using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, when I saw the HTML of finance.yahoo.com, I noticed that the data is converted by the salted base64. In order to decrypt the data, it is required to use the key data. But, unfortunately, I couldn&amp;rsquo;t find the key data from the HTML. When I searched for it, I found &lt;a href=&#34;https://github.com/ranaroussi/yfinance/issues/1246&#34;&gt;this thread&lt;/a&gt;. From the thread, I could retrieve the key data. By this, I could a script for decrypting the salted base64.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Encrypting and Decrypting with AES using crypto-js with Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/12/21/encrypting-and-decrypting-with-aes-using-crypto-js-with-google-apps-script/</link>
      <pubDate>Wed, 21 Dec 2022 15:16:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/12/21/encrypting-and-decrypting-with-aes-using-crypto-js-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1038c73f028b7595f4e070a0e7d48ff1&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for encrypting and decrypting with AES using crypto-js with Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, Google Apps Script cannot encrypt and decrypt AES using the built-in functions. In this post, in order to achieve this, &amp;ldquo;crypto-js&amp;rdquo; is used from cdnjs.com ( &lt;a href=&#34;https://cdnjs.com/libraries/crypto-js&#34;&gt;https://cdnjs.com/libraries/crypto-js&lt;/a&gt; ). In the current stage, it seems that the main functions of &lt;code&gt;crypto-js.min.js&lt;/code&gt; can be directly used with Google Apps Script. But, unfortunately, all functions cannot be used. Please be careful about this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rearranging Columns on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/12/21/rearranging-columns-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 21 Dec 2022 10:12:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/12/21/rearranging-columns-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5ca3ed56c36cb7b947e14d5b1dbab6a2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221221a/fig1.png&#34;&#xA;     alt=&#34;Rearranging Columns on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for rearranging columns on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;In this sample script, the initial columns of &amp;ldquo;header1&amp;rdquo;, &amp;ldquo;header2&amp;rdquo;, &amp;ldquo;header3&amp;rdquo;, &amp;ldquo;header4&amp;rdquo; and &amp;ldquo;header5&amp;rdquo; are rearranged to &amp;ldquo;header2&amp;rdquo;, &amp;ldquo;header5&amp;rdquo;, &amp;ldquo;header1&amp;rdquo;, &amp;ldquo;header4&amp;rdquo;, &amp;ldquo;header3&amp;rdquo;. This result can be seen at the above image.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;As an important point, in this script, the header titles in the 1st row are used. Please be careful about this.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Values from Publicly Shared Google Spreadsheet using API key with Javascript</title>
      <link>https://tanaikech.github.io/2022/12/16/retrieving-values-from-publicly-shared-google-spreadsheet-using-api-key-with-javascript/</link>
      <pubDate>Fri, 16 Dec 2022 10:33:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/12/16/retrieving-values-from-publicly-shared-google-spreadsheet-using-api-key-with-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/aeb1a21e1e51a902f903e6363cd1a5db&#34;&gt;Gsits&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the values from a publicly shared Google Spreadsheet using an API key with Javascript.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;In this sample script, googleapis for Javascript is used.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://apis.google.com/js/api.js&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onload&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;handleClientLoad()&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/script&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;handleClientLoad&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apiKey&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your API key.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;spreadsheetId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your Spreadsheet ID.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;gapi&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;load&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;client&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gapi&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;client&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;init&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;apiKey&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;discoveryDocs&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://sheets.googleapis.com/$discovery/rest?version=v4&amp;#34;&lt;/span&gt;] });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; } &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gapi&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;client&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;spreadsheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;spreadsheetId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In this sample, I used &lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/get&#34;&gt;Method: spreadsheets.values.get&lt;/a&gt;. Of course, in this case, you can use the methods of &lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/get&#34;&gt;Method: spreadsheets.get&lt;/a&gt;, &lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/batchGet&#34;&gt;Method: spreadsheets.values.batchGet&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Copying and Deleting Dimension Groups in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/12/14/copying-and-deleting-dimension-groups-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 14 Dec 2022 10:16:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/12/14/copying-and-deleting-dimension-groups-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bb50f2e188327afd616bd2678ab0b40f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221214a/fig1.png&#34;&#xA;     alt=&#34;Copying and Deleting Dimension Groups in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this post, I would like to introduce 2 sample scripts for copying and deleting the dimension groups in Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, all dimension groups cannot be copied by one action, and also, all dimension groups cannot be deleted by one action. In this post, these can be achieved using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Reflecting Latest Script to Deployed Web Apps Created by Google Apps Script without Redeploying</title>
      <link>https://tanaikech.github.io/2022/12/07/workaround-reflecting-latest-script-to-deployed-web-apps-created-by-google-apps-script-without-redeploying/</link>
      <pubDate>Wed, 07 Dec 2022 14:50:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/12/07/workaround-reflecting-latest-script-to-deployed-web-apps-created-by-google-apps-script-without-redeploying/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e46def22cf106b012dfa5ad359b93d24&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This report is a workaround for reflecting the latest Google Apps Script to the deployed Web Apps without redeploying.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pattern-1&#34;&gt;Pattern 1&lt;/h2&gt;&#xA;&lt;p&gt;Of course, when the developer mode of &lt;code&gt;https://script.google.com/macros/s/###/dev&lt;/code&gt; is used, the latest script can be used without redeploying.&lt;/p&gt;&#xA;&lt;p&gt;But, in this case, only the permitted users can use it using the access token. when you want to achieve this using the endpoint of &lt;code&gt;https://script.google.com/macros/s/###/exec&lt;/code&gt; without the access token, in order to reflect the latest script to Web Apps, it is required to redeploy. As another pattern, I would like to introduce a workaround for this situation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Searching Gmail Messages by Gmail Filters using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/12/03/searching-gmail-messages-by-gmail-filters-using-google-apps-script/</link>
      <pubDate>Sat, 03 Dec 2022 09:49:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/12/03/searching-gmail-messages-by-gmail-filters-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bc8788c65afeba42ec2e560bfa5eb8b2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for searching Gmail messages by Gmail Filters using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;At Gmail, users can set the filter for the Emails. With this filter, users can filter the Emails of Gmail. But, when the users want to search by the installed filter using Google Apps Script, unfortunately, it seems that this cannot be directly achieved. For example, messages cannot be searched using a filter ID.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Specific Folders from Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/11/29/retrieving-specific-folders-from-google-drive-using-google-apps-script/</link>
      <pubDate>Tue, 29 Nov 2022 09:49:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/11/29/retrieving-specific-folders-from-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5be73060a7941d73ce7179c6fa77206a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are sample scripts for retrieving specific folders from Google Drive using Google Drive service (DriveApp) with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;retrieving-folders-in-own-google-drive&#34;&gt;Retrieving folders in own Google Drive&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;searchFolders&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;`&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Session&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveUser&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getEmail&lt;/span&gt;()&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; in owners and trashed=false`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hasNext&lt;/span&gt;()) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;next&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;retrieving-folders-in-shared-drives&#34;&gt;Retrieving folders in shared Drives&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;searchFolders&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;`not &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Session&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveUser&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getEmail&lt;/span&gt;()&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; in owners and trashed=false`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hasNext&lt;/span&gt;()) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;next&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;owner&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getOwner&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;owner&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;retrieving-folders-of-sharedwithme&#34;&gt;Retrieving folders of sharedWithMe&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;searchFolders&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`sharedWithMe`&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hasNext&lt;/span&gt;()) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;next&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Converting Gmail Message to Image using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/11/22/converting-gmail-message-to-image-using-google-apps-script/</link>
      <pubDate>Tue, 22 Nov 2022 16:34:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/11/22/converting-gmail-message-to-image-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/12a61cb7e4516acc95ecf15287b3f0f3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221122a/fig1.png&#34;&#xA;     alt=&#34;Converting Gmail Message to Image using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a workaround for converting a Gmail message to a PNG image using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please set the message ID of Gmail.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your message ID of Gmail.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;message&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GmailApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getMessageById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;date&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;formatDate&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;message&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getDate&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Session&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getScriptTimeZone&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;yyyy-MM-dd HH:mm:ss&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;message&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFrom&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;message&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getTo&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;subject&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;message&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSubject&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htmlBody&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;message&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBody&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;imageBlob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Charts&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newTableChart&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;setDataTable&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;Charts&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newDataTable&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;addColumn&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;Charts&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ColumnType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;STRING&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;addRow&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;`&amp;lt;p style=&amp;#34;font-size: 120%&amp;#34;&amp;gt;Date: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;date&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/p&amp;gt;`&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;addRow&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;`&amp;lt;p style=&amp;#34;font-size: 120%&amp;#34;&amp;gt;From: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/p&amp;gt;`&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;addRow&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;`&amp;lt;p style=&amp;#34;font-size: 120%&amp;#34;&amp;gt;To: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/p&amp;gt;`&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;addRow&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;`&amp;lt;p style=&amp;#34;font-size: 120%&amp;#34;&amp;gt;Subject: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;subject&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/p&amp;gt;`&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;addRow&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;htmlBody&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;build&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;setOption&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;allowHtml&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;setDimensions&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;build&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;imageBlob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample.png&amp;#34;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In this sample script, the HTML body is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been featured by Google Workspace Developer Newsletter</title>
      <link>https://tanaikech.github.io/2022/11/15/my-report-has-been-featured-by-google-workspace-developer-newsletter/</link>
      <pubDate>Tue, 15 Nov 2022 15:29:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/11/15/my-report-has-been-featured-by-google-workspace-developer-newsletter/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221115a/fig1.png&#34;&#xA;     alt=&#34;My report has been featured by Google Workspace Developer Newsletter&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;My report has been featured by Google Workspace Developer Newsletter. &lt;a href=&#34;https://developers.google.com/workspace/newsletters#expandable-2&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The featured report is &lt;a href=&#34;https://tanaikech.github.io/2022/10/26/report-implementing-pseudo-2fa-for-web-apps-using-google-apps-script/&#34;&gt;&amp;ldquo;Report: Implementing Pseudo 2FA for Web Apps using Google Apps Script&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Video File on Google Drive to YouTube with Resumable Upload using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/11/13/uploading-video-file-on-google-drive-to-youtube-with-resumable-upload-using-google-apps-script/</link>
      <pubDate>Sun, 13 Nov 2022 14:30:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/11/13/uploading-video-file-on-google-drive-to-youtube-with-resumable-upload-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e41b1a674f0c3912aa7c29aac28a57cd&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221113a/fig1.png&#34;&#xA;     alt=&#34;Uploading Video File on Google Drive to YouTube with Resumable Upload using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a simple sample script for uploading a video file on Google Drive to YouTube with the resumable upload using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When you want to upload a video file to YouTube using Google Apps Script, when YouTube API of Advanced Google services is used, the maximum file size is 5 MB, because, in this case, the video file is uploaded with &lt;code&gt;multipart/form-data&lt;/code&gt;. When you want to use a video file with more file size using Google Apps Script, a resumable upload is required to be used. But, unfortunately, in the current stage, the methods of Google Apps Script for uploading large video files are not prepared. And also, when I saw the document of resumable upload on YouTube in the official document, I thought that it might be a bit complicated for understanding the resumable upload process. &lt;a href=&#34;https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol&#34;&gt;Ref&lt;/a&gt; So, in this post, I would like to introduce a simple sample script for uploading video data of more than 5 MB with the resumable upload using Google Apps Script. In this case, the video file is existing in Google Drive. The video file on Google Drive is uploaded to YouTube using Google Apps Script. When this sample script will help you understand the resumable upload of YouTube, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Curl Command Uploading Video File to YouTube with Resumable Upload using YouTube API</title>
      <link>https://tanaikech.github.io/2022/11/11/curl-command-uploading-video-file-to-youtube-with-resumable-upload-using-youtube-api/</link>
      <pubDate>Fri, 11 Nov 2022 21:34:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/11/11/curl-command-uploading-video-file-to-youtube-with-resumable-upload-using-youtube-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5f3ce2d002e1b8e5916821ecc1dacbdc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample curl command for uploading a video file to YouTube with the resumable upload using YouTube API.&lt;/p&gt;&#xA;&lt;p&gt;In order to upload a video file to YouTube with the resumable upload using YouTube API, the following 2 processes are required to be done. The basic process of the resumable upload for YouTube is the same with Drive API. &lt;a href=&#34;https://developers.google.com/drive/api/guides/manage-uploads#resumable&#34;&gt;Ref&lt;/a&gt; So, I think that this document of Drive API might be useful for understanding the resumable upload process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Detecting to Edit Google Spreadsheet using Sheets API with Service Account</title>
      <link>https://tanaikech.github.io/2022/11/10/workaround-detecting-to-edit-google-spreadsheet-using-sheets-api-with-service-account/</link>
      <pubDate>Thu, 10 Nov 2022 14:41:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/11/10/workaround-detecting-to-edit-google-spreadsheet-using-sheets-api-with-service-account/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5388797761cb92cf1fe325e939c10b25&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a workaround for detecting to edit Google Spreadsheet using Sheets API with the service account.&lt;/p&gt;&#xA;&lt;p&gt;It has already been found that when Google Spreadsheet is edited using Sheets API, this can be detected by the installed OnChange trigger. For example, when a Spreadsheet is edited using Sheets API with the access token retrieved from your Google account, the event object of the installable OnChange trigger includes your email address and nickname. With this information, you can know the user who edited the Spreadsheet. However, when the Spreadsheet is edited using Sheets API with the access token retrieved from the service account, unfortunately, the email of the service account is not included in the event object of the OnChange event. It is considered that this is the current specification.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using getBatchGet, batchCreateContacts, batchDeleteContacts, batchUpdateContacts of People API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/11/08/using-getbatchget-batchcreatecontacts-batchdeletecontacts-batchupdatecontacts-of-people-api-with-google-apps-script/</link>
      <pubDate>Tue, 08 Nov 2022 14:16:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/11/08/using-getbatchget-batchcreatecontacts-batchdeletecontacts-batchupdatecontacts-of-people-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/70e08b966e2f8095462dffa5760100c9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221108a/fig1.png&#34;&#xA;     alt=&#34;Using getBatchGet, batchCreateContacts, batchDeleteContacts, batchUpdateContacts of People API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;These are the sample scripts for using getBatchGet, batchUpdateContacts, batchDeleteContacts, batchCreateContacts of People API with Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When the data is retrieved and put with People API, the process cost can be reduced by using batch requests. Fortunately, in the current stage, People API has native methods for using batch requests. Those are getBatchGet, batchCreateContacts, batchDeleteContacts, and batchUpdateContacts. In this post, I would like to introduce the sample scripts for using the batch requests of People API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been published at Champion Innovators Content Library</title>
      <link>https://tanaikech.github.io/2022/11/03/my-report-has-been-published-at-champion-innovators-content-library/</link>
      <pubDate>Thu, 03 Nov 2022 13:48:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/11/03/my-report-has-been-published-at-champion-innovators-content-library/</guid>
      <description>&lt;p&gt;My report has been published at &lt;a href=&#34;https://cloud.google.com/innovators/champions/content#/?q=tanaike&#34;&gt;Champion Innovators Content Library&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tanaikech.github.io/2022/10/26/report-implementing-pseudo-2fa-for-web-apps-using-google-apps-script/&#34;&gt;Report: Implementing Pseudo 2FA for Web Apps using Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If these reports will be useful, I’m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Checking Existence of File ID in Google Drive without Access token and API key</title>
      <link>https://tanaikech.github.io/2022/10/31/workaround-checking-existence-of-file-id-in-google-drive-without-access-token-and-api-key/</link>
      <pubDate>Mon, 31 Oct 2022 08:16:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/31/workaround-checking-existence-of-file-id-in-google-drive-without-access-token-and-api-key/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ef51e36e53c5e49d2a8dc3736e8a9386&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a workaround for checking the existence of file ID in Google Drive without both the access token and API key.&lt;/p&gt;&#xA;&lt;p&gt;When you want to check whether the file of the file ID is existing in Google Drive, generally, you might use Drive API and Drive service (DriveApp) of Google Apps Script. In this case, the scope of Drive API is required to be used. By this, the access token and the API key (in the case of publicly shared files) are required to be used. But, there might be a case that the available scopes are limited. In this post, I would like to introduce a workaround for checking the existence of file ID in Google Drive without both the access token and API key.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Values of Calendar Events of Smart Chips on Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/10/27/retrieving-values-of-calendar-events-of-smart-chips-on-google-document-using-google-apps-script/</link>
      <pubDate>Thu, 27 Oct 2022 16:20:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/27/retrieving-values-of-calendar-events-of-smart-chips-on-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a130a87830ffbde46f160401787e1dff&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a workaround for retrieving the values and URLs from the smart chips inserted in Google Document using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, the smart chips for Google Document are updated. &lt;a href=&#34;https://workspaceupdates.googleblog.com/2022/10/smart-chips-files-google-sheets.html&#34;&gt;Ref1&lt;/a&gt; and &lt;a href=&#34;https://workspaceupdates.googleblog.com/2022/10/smart-chips-events-google-sheets.html&#34;&gt;Ref2&lt;/a&gt; It is considered that this update will advance the collaboration for editing Document. So, there might a case that the information of the smart chips is required to be retrieved. Unfortunately, in the current stage, there are no methods for directly retrieving the information of the smart chips while the smart chips of DATE and PERSON can be retrieved. I believe that all smart chips will be able to be managed with Google Apps Script in the future update.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Putting Multiple Hyperlinks to a Cell using Sheets API with Google Apps Script and Node.js</title>
      <link>https://tanaikech.github.io/2022/10/27/putting-multiple-hyperlinks-to-a-cell-using-sheets-api-with-google-apps-script-and-node.js/</link>
      <pubDate>Thu, 27 Oct 2022 09:51:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/27/putting-multiple-hyperlinks-to-a-cell-using-sheets-api-with-google-apps-script-and-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4c27bf8d1948a5dfa5b0e53ce88c6d30&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have submitted a report of &lt;a href=&#34;https://gist.github.com/tanaikech/b18c0189a5d0266a849090fdbe6750a5&#34;&gt;&amp;ldquo;Workaround: Putting Multiple Hyperlinks to a Cell using Sheets API&amp;rdquo;&lt;/a&gt; before. At that time, there are no direct methods for setting multiple hyperlinks to the part of text in a cell. But, recently, &lt;code&gt;textFormatRuns&lt;/code&gt; was added to Sheets API. By this, multiple hyperlinks got to be able to be set to the part of text in a cell. In this report, I would like to introduce a sample script for this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Implementing Pseudo 2FA for Web Apps using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/10/26/report-implementing-pseudo-2fa-for-web-apps-using-google-apps-script/</link>
      <pubDate>Wed, 26 Oct 2022 10:13:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/26/report-implementing-pseudo-2fa-for-web-apps-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7a15164b1227e2ec2231fce24ae9daf2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221026a/fig1.png&#34;&#xA;     alt=&#34;Report: Implementing Pseudo 2FA for Web Apps using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;In Google Apps Script, there is the Web Apps. When Web Apps is used, the users can execute Google Apps Script using HTML and Javascript. This can be applied to various applications. When the Web Apps is deployed with &amp;ldquo;Anyone&amp;rdquo;, anyone can access the Web Apps. And, there is the case that Web Apps deployed with &amp;ldquo;Anyone&amp;rdquo; is required to be used. Under this condition, when 2 Factor Authentication (2FA) can be implemented, it is considered that the security can be higher and it leads to giving various directions for the applications using Web Apps. In this report, I would like to introduce the method for implementing the pseud 2FA for Web Apps deployed with “Anyone” using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: createdDate cannot be used with searchFiles of DriveApp in Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/10/19/workaround-createddate-cannot-be-used-with-searchfiles-of-driveapp-in-google-apps-script/</link>
      <pubDate>Wed, 19 Oct 2022 10:42:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/19/workaround-createddate-cannot-be-used-with-searchfiles-of-driveapp-in-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2b9d86a7db01f72e88090116cb5fee1f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, in order to retrieve the file list using the created date, the search query of &lt;code&gt;createdDate&lt;/code&gt; cannot be used with &lt;code&gt;searchFiles&lt;/code&gt; method of &lt;code&gt;DriveApp&lt;/code&gt; in Google Apps Script. This has already been reported at &lt;a href=&#34;https://issuetracker.google.com/issues/79355545&#34;&gt;this issue tracker&lt;/a&gt; In this post, I would like to introduce a workaround for searching the files using the created date.&lt;/p&gt;&#xA;&lt;h2 id=&#34;issue-and-workaround&#34;&gt;Issue and workaround&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The parameter of &amp;ldquo;searchFiles&amp;rdquo; method of &lt;code&gt;DriveApp&lt;/code&gt; uses the search query for Drive API v2. When I tested &lt;code&gt;createdDate &amp;gt; &#39;####-##-##&#39;&lt;/code&gt; for &amp;ldquo;searchFiles&amp;rdquo; and &amp;ldquo;Files: list&amp;rdquo; of Drive API v2, I confirmed errors like &lt;code&gt;Invalid argument: q&lt;/code&gt; and &lt;code&gt;Invalid query&lt;/code&gt; occurred, respectively.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating and Deleting Multiple Events in Google Calendar by Batch Requests using Calendar API with Node.js</title>
      <link>https://tanaikech.github.io/2022/10/11/creating-and-deleting-multiple-events-in-google-calendar-by-batch-requests-using-calendar-api-with-node.js/</link>
      <pubDate>Tue, 11 Oct 2022 10:21:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/11/creating-and-deleting-multiple-events-in-google-calendar-by-batch-requests-using-calendar-api-with-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/33544a8f56cb5b4c2f96ceb29d6b2855&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are the sample scripts for creating and deleting multiple events in Google Calendar by batch requests using Calendar API with Node.js.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, unfortunately, googleapis for Node.js cannot request batch requests. &lt;a href=&#34;https://github.com/googleapis/google-api-nodejs-client&#34;&gt;Ref&lt;/a&gt; So, when multiple events are created and deleted in Google Calendar using Node.js, it is required to run the script in a loop. In this case, the process cost becomes high. &lt;a href=&#34;https://cloud.google.com/blog/topics/developers-practitioners/efficient-file-management-using-batch-requests-google-apps-script&#34;&gt;Ref&lt;/a&gt; In this post, I would like to introduce creating and deleting multiple events in Google Calendar using batch request with Node.js.&lt;/p&gt;</description>
    </item>
    <item>
      <title>node module - node-gbatchrequests</title>
      <link>https://tanaikech.github.io/2022/10/08/node-module-node-gbatchrequests/</link>
      <pubDate>Sat, 08 Oct 2022 15:24:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/08/node-module-node-gbatchrequests/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Node.js module to run the batch requests of Google APIs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;In Google APIs, there are APIs where batch requests can be run. The batch requests can run multiple API calls by one API call with the asynchronous process. By this, both the process cost and the quota cost can be reduced. &lt;a href=&#34;https://cloud.google.com/blog/topics/developers-practitioners/efficient-file-management-using-batch-requests-google-apps-script&#34;&gt;Ref&lt;/a&gt; In Node.js, the wonderful module of googleapis for Node.js is existing. But, in the current stage, unfortunately, it seems that the googleapis for Node.js cannot run the batch requests. &lt;a href=&#34;https://github.com/googleapis/google-api-nodejs-client/issues/2375&#34;&gt;Ref&lt;/a&gt; So, I created this module. This module can achieve batch requests with Node.js. In order to run batch requests, the access token retrieved from googleapis for Node.js can be used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updating Array1 with Array2 using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/10/04/updating-array1-with-array2-using-google-apps-script/</link>
      <pubDate>Tue, 04 Oct 2022 10:00:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/04/updating-array1-with-array2-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fb7149425069ad1138f36162698385df&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221004a/fig1.png&#34;&#xA;     alt=&#34;Updating Array1 with Array2 using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for updating Array1 with Array2 using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;As a sample situation, there are 2 arrays (Array1 and Array2) of the 2-dimensional array. The sample situation can be seen in the above sample Spreadsheet.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Conditions&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the values of column &amp;ldquo;A&amp;rdquo; of Array2 are existing in column &amp;ldquo;A&amp;rdquo; of Array1, the rows of Array1 are updated by that of Array2.&lt;/li&gt;&#xA;&lt;li&gt;When the values of column &amp;ldquo;A&amp;rdquo; of Array2 are not existing in column &amp;ldquo;A&amp;rdquo; of Array1, the rows of Array2 are appended to Array1.&lt;/li&gt;&#xA;&lt;li&gt;When the values of column &amp;ldquo;A&amp;rdquo; of Array1 are not existing in column &amp;ldquo;A&amp;rdquo; of Array2, the rows of Array1 are deleted.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I sometimes see such questions on Stackoverflow. So, I thought that when this sample script is posted, it might be useful for users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been published on the Blog of Google Cloud</title>
      <link>https://tanaikech.github.io/2022/10/03/my-report-has-been-published-on-the-blog-of-google-cloud/</link>
      <pubDate>Mon, 03 Oct 2022 15:18:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/03/my-report-has-been-published-on-the-blog-of-google-cloud/</guid>
      <description>&lt;p&gt;My report has been published on the Blog of Google Cloud.&lt;/p&gt;&#xA;&lt;h3 id=&#34;blog&#34;&gt;Blog&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://cloud.google.com/blog/topics/developers-practitioners/efficient-file-management-using-batch-requests-google-apps-script&#34;&gt;Efficient File Management using Batch Requests with Google Apps Script&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://cloud.google.com/blog/topics/developers-practitioners/efficient-file-management-using-batch-requests-google-apps-script&#34;&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221003a/fig1.png&#34;&#xA;     alt=&#34;My report has been published on the Blog of Google Cloud&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;twitter&#34;&gt;Twitter&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/GoogleCloudTech/status/1576331875936882691&#34;&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20221003a/fig2.png&#34;&#xA;     alt=&#34;My report has been published on the Blog of Google Cloud&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Batch Path for Batch Requests using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/10/01/retrieving-batch-path-for-batch-requests-using-google-apps-script/</link>
      <pubDate>Sat, 01 Oct 2022 09:03:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/10/01/retrieving-batch-path-for-batch-requests-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a970943f91c0dd0955d1722743e560df&#34;&gt;Gist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the batch path for using the batch requests using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;After August 12, 2020, in order to use batch requests, the batch path is required to be used to the endpoint of the batch requests. And, the batch path is sometimes updated. So, when a constant batch path has been continued to be used, this might lead to the reason for an error. In this sample script, the batch path is retrieved from Discovery API. By this, the latest batch path can be always obtained.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - BatchRequest</title>
      <link>https://tanaikech.github.io/2022/09/30/updated-gas-library-batchrequest/</link>
      <pubDate>Fri, 30 Sep 2022 15:51:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/30/updated-gas-library-batchrequest/</guid>
      <description>&lt;h2 id=&#34;batchrequest-was-updated-to-v120&#34;&gt;BatchRequest was updated to v1.2.0.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.0 (September 30, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A new method of &lt;a href=&#34;https://github.com/tanaikech/BatchRequest/blob/master/README.md#getbatchpath&#34;&gt;getBatchPath(name, version)&lt;/a&gt; was added. After August 12, 2020, in order to use batch requests, the batch path is required to be used to the endpoint of the batch requests. And, the batch path is sometimes updated. So, when a constant batch path has been continued to be used, this might lead to the reason for an error. In this method, the batch path is retrieved from Discovery API. By this, the latest batch path can be always simply obtained from the name of Google API. And, the retrieved batch path can be used in &lt;a href=&#34;https://github.com/tanaikech/BatchRequest/blob/master/README.md#do&#34;&gt;Do(object)&lt;/a&gt; and &lt;a href=&#34;https://github.com/tanaikech/BatchRequest/blob/master/README.md#edo&#34;&gt;EDo(object)&lt;/a&gt; methods.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/BatchRequest&#34;&gt;https://github.com/tanaikech/BatchRequest&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - DocsServiceApp</title>
      <link>https://tanaikech.github.io/2022/09/29/updated-gas-library-docsserviceapp/</link>
      <pubDate>Thu, 29 Sep 2022 10:41:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/29/updated-gas-library-docsserviceapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a Google Apps Script library for supporting Document service, Docs API, Spreadsheet service, Sheets API, Slides service and Slides API.&lt;/strong&gt; The aim of this library is to compensate the processes that they services cannot achieve.&lt;/p&gt;&#xA;&lt;h3 id=&#34;docsserviceapp-was-updated-to-v120&#34;&gt;DocsServiceApp was updated to v1.2.0&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/DocsServiceApp/raw/master/images/fig5.png&#34;&#xA;     alt=&#34;Updated: GAS Library - DocsServiceApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.0 (September 29, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Added a new method of &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp#6-getnamedfunctions&#34;&gt;&lt;code&gt;getNamedFunctions()&lt;/code&gt;&lt;/a&gt;. This method can retrieve the named functions from Google Spreadsheet.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp&#34;&gt;https://github.com/tanaikech/DocsServiceApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Named Functions from Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/09/28/retrieving-named-functions-from-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 28 Sep 2022 16:18:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/28/retrieving-named-functions-from-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9a9e571ed662e35eec0aa747bb4e025a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220928b/fig1.png&#34;&#xA;     alt=&#34;Retrieving Named Functions from Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the named functions from Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, the named functions got to be able to be used in Google Spreadsheet. &lt;a href=&#34;https://workspaceupdates.googleblog.com/2022/08/named-functions-google-sheets.html&#34;&gt;Ref&lt;/a&gt; When several named functions are added, I thought that I wanted to retrieve these functions using a script. But, unfortunately, in the current stage, it seems that there are no built-in methods (SpreadsheetApp and Sheets API) for directly retrieving the named functions. So, I created this sample script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Cell Coordinates of Cells with Quote Prefix using Google Apps Script (Single Quote)</title>
      <link>https://tanaikech.github.io/2022/09/28/retrieving-cell-coordinates-of-cells-with-quote-prefix-using-google-apps-script-single-quote/</link>
      <pubDate>Wed, 28 Sep 2022 15:40:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/28/retrieving-cell-coordinates-of-cells-with-quote-prefix-using-google-apps-script-single-quote/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/89fb802a5ac04bc627c9b6f77476edd9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220928a/fig1.png&#34;&#xA;     alt=&#34;Retrieving Cell Coordinates of Cells with Quote Prefix using Google Apps Script (Single Quote)&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This sample script retrieves the cell coordinates of cells with the quote prefix. In Google Spreadsheet, when a single quote is added to the top letter of the cell value, the cell is used as the text value. When we want to search the cells with the quote prefix in Spreadsheet, unfortunately, in the current stage, this cannot be achieved using Spreadsheet service (SpreadsheetApp) and Sheets API. In this method, such cells can be retrieved. The output values are the cell coordinates of the cells with the quote prefix.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - DocsServiceApp</title>
      <link>https://tanaikech.github.io/2022/09/28/updated-gas-library-docsserviceapp/</link>
      <pubDate>Wed, 28 Sep 2022 15:33:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/28/updated-gas-library-docsserviceapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a Google Apps Script library for supporting Document service, Docs API, Spreadsheet service, Sheets API, Slides service and Slides API.&lt;/strong&gt; The aim of this library is to compensate the processes that they services cannot achieve.&lt;/p&gt;&#xA;&lt;h3 id=&#34;docsserviceapp-was-updated-to-v110&#34;&gt;DocsServiceApp was updated to v1.1.0&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/DocsServiceApp/raw/master/images/fig4.png&#34;&#xA;     alt=&#34;Updated: GAS Library - DocsServiceApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.0 (September 28, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Added a new method of &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp#5-getquoteprefixcells&#34;&gt;&lt;code&gt;getQuotePrefixCells()&lt;/code&gt;&lt;/a&gt;. This method can detect the cells with the quote prefix cells.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp&#34;&gt;https://github.com/tanaikech/DocsServiceApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Showing Specific Rows and Columns in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/09/27/showing-specific-rows-and-columns-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Tue, 27 Sep 2022 10:41:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/27/showing-specific-rows-and-columns-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7573fe1aa0bd4fb3d0a1ff9740496ccc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220927a/fig1.gif&#34;&#xA;     alt=&#34;Showing Specific Rows and Columns in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for showing the specific rows and columns in Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When you export a Google Spreadsheet as a PDF file, you might have a case where you want to export the specific rows and columns in a sheet. In this post, I would like to introduce the sample script for achieving this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Removing Vertical Borders of Table in Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/09/23/removing-vertical-borders-of-table-in-google-document-using-google-apps-script/</link>
      <pubDate>Fri, 23 Sep 2022 11:23:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/23/removing-vertical-borders-of-table-in-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/811c4f6965346b95b3c507e1feb83177&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220923a/fig0.png&#34;&#xA;     alt=&#34;Removing Vertical Borders of Table in Google Document using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;These are sample scripts for removing the vertical borders of a table in Google Document using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, only the vertical borders cannot be removed from the table in Google Document using the Google Document service (DocumentApp). I believe that this might be resolved in the future update. But, in the current stage, when Google Docs API is used, this can be achieved. So, Google Docs API can be used as the current workaround. But, I thought that the combination of Google Document service (DocumentApp) and Google Docs API might be a bit complicated. So, I would like to introduce 3 sample scripts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrying UrlFetchApp by an Error using Google Apps Script (RetryFetch)</title>
      <link>https://tanaikech.github.io/2022/09/23/retrying-urlfetchapp-by-an-error-using-google-apps-script-retryfetch/</link>
      <pubDate>Fri, 23 Sep 2022 10:12:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/23/retrying-urlfetchapp-by-an-error-using-google-apps-script-retryfetch/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ff431dacecc9af58d5e3c1b2aee53d5a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrying UrlFetchApp of Google Apps Script when an error occurs.&lt;/p&gt;&#xA;&lt;p&gt;When the HTTP request is run using UrlFetchApp, there is a case that an error occurs in various situations. And, there is a case that when the request is run again, no error occurs. This sample script can automatically retry the requests using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;This is Class RetryFetch.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * UrlFetchApp is run by retrying when an error occurs.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;RetryFetch&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @param {string} url URL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @param {object} params Object&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @param {number} numberOfRetr Number of retry when an error occurs with the HTTP request.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @param {number} waitTime Wait time between the HTTP request.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @return {UrlFetchApp.HTTPResponse}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;constructor&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {}, &lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfRetry&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;waitTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;muteHttpExceptions&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;muteHttpExceptions&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfRetry&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfRetry&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;waitTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;waitTime&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;his&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;statusCode&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getResponseCode&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;his&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;date&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Date(), &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;statusCode&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;statusCode&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfRetry&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`Status code: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;statusCode&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;, Retry: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfRetry&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;his&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;his&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;responseHeader&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getAllHeaders&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;his&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfRetry&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;waitTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;numberOfRetry&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * Return history of fetch requesting in this Class.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @return {array} History.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;history&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;his&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is a sample script for using Class RetryFetch.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Requesting with Keeping Cookies using Google Apps Script (SessionFetch)</title>
      <link>https://tanaikech.github.io/2022/09/22/requesting-with-keeping-cookies-using-google-apps-script-sessionfetch/</link>
      <pubDate>Thu, 22 Sep 2022 13:29:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/22/requesting-with-keeping-cookies-using-google-apps-script-sessionfetch/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6202470a2bb4d22d1b195bb20bf8390c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for requesting with keeping cookies using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;This might be similar to requests.Session&amp;quot; of Python. &lt;a href=&#34;https://requests.readthedocs.io/en/latest/api/#sessionapi&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;This is Class SessionFetch.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * UrlFetchApp is run by keeping Cookie.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SessionFetch&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;constructor&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cookie&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;his&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * Request URL.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @param {string} url URL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @param {object} params Object&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @return {UrlFetchApp.HTTPResponse}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {}) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cookie&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;Cookie&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cookie&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Cookie&amp;#34;&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Cookie&amp;#34;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cookie&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;his&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;date&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Date(), &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cookie&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getAllHeaders&lt;/span&gt;()[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Set-Cookie&amp;#34;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * Return history of fetch requesting in this Class.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   * @return {array} History.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;   */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;history&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;his&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is a sample script for using Class SessionFetch.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Files of &#39;Shared with Me&#39; in Specific Folder using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/09/20/retrieving-files-of-shared-with-me-in-specific-folder-using-google-apps-script/</link>
      <pubDate>Tue, 20 Sep 2022 11:26:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/20/retrieving-files-of-shared-with-me-in-specific-folder-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ddebdc6c32937cbe2a525991398f066c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the files of &amp;lsquo;Shared with Me&amp;rsquo; in the specific folder using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, when you transfer the ownership of your file on your Google Drive to another user and/or copy the file &amp;ldquo;Shared with me&amp;rdquo; to the specific folder on your Google Drive, the file becomes the shortcut file. Under this situation, when you want to retrieve the files of &amp;ldquo;Shared with me&amp;rdquo; in the specific folder, unfortunately, the following search query cannot be used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Full-text search of Google Apps Script Projects using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/09/14/full-text-search-of-google-apps-script-projects-using-google-apps-script/</link>
      <pubDate>Wed, 14 Sep 2022 14:33:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/14/full-text-search-of-google-apps-script-projects-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d557d3e239189877e595ed622ce2cb88&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220914a/fig1.png&#34;&#xA;     alt=&#34;Full-text search of Google Apps Script Projects using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;These are sample scripts for achieving the full-text search of Google Apps Script projects using Google Apps Script. I have the case that I want to search a value from Google Apps Script projects using a Google Apps Script. In this post, I would like to introduce the sample scripts for achieving the full-text search of Google Apps Script projects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Process Costs for Checking Value in Array using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/09/12/benchmark-process-costs-for-checking-value-in-array-using-google-apps-script/</link>
      <pubDate>Mon, 12 Sep 2022 14:24:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/12/benchmark-process-costs-for-checking-value-in-array-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b7df3cd77a933dba247670f5eda15e4b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;There is a maximum executing time for Google Apps Script (GAS). That is 6 minutes. And, in the case of the custom function and the simple trigger, it is 30 seconds. &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/quotas#current_limitations&#34;&gt;Ref&lt;/a&gt; So users always have to pay attention to reducing the process cost of the scripts. Especially, it is very important to know the process costs for the array processing, because array processing is often used for spreadsheets and Google APIs. I have already reported about the array processing at &lt;a href=&#34;https://tanaikech.github.io/2020/02/09/benchmark-loop-for-array-processing-using-google-apps-script-with-v8/&#34;&gt;&amp;ldquo;Benchmark: Loop for Array Processing using Google Apps Script with V8&amp;rdquo;&lt;/a&gt; and &lt;a href=&#34;https://tanaikech.github.io/2018/07/02/benchmark-search-for-array-processing-using-google-apps-script/&#34;&gt;&amp;ldquo;Search for Array Processing using Google Apps Script&amp;rdquo;&lt;/a&gt;. In this report, the process cost checking a value in a one-dimensional array using Google Apps Script has been investigated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My 3 reports have been published at Champion Innovators Content Library</title>
      <link>https://tanaikech.github.io/2022/09/06/my-3-reports-have-been-published-at-champion-innovators-content-library/</link>
      <pubDate>Tue, 06 Sep 2022 15:38:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/06/my-3-reports-have-been-published-at-champion-innovators-content-library/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220906c/fig1.png&#34;&#xA;     alt=&#34;My 3 reports have been published at Champion Innovators Content Library&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Following 3 reports have been published at &lt;a href=&#34;https://cloud.google.com/innovators/champions/content#/?q=tanaike&#34;&gt;Champion Innovators Content Library&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script&#34;&gt;Taking advantage of Web Apps with Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tanaikech.github.io/2022/07/23/report-management-of-images-on-google-spreadsheet-using-google-apps-script/&#34;&gt;Report: Management of Images on Google Spreadsheet using Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tanaikech.github.io/2022/04/25/report-handling-10000000-cells-in-google-spreadsheet-using-google-apps-script/&#34;&gt;Report: Handling 10,000,000 cells in Google Spreadsheet using Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If these reports will be useful, I’m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Large images to Google Document by OCR using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/09/06/converting-large-images-to-google-document-by-ocr-using-google-apps-script/</link>
      <pubDate>Tue, 06 Sep 2022 14:58:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/06/converting-large-images-to-google-document-by-ocr-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d4efe1c07b99807f63fe7d5c058c0628&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220906b/fig1.png&#34;&#xA;     alt=&#34;Converting Large images to Google Document by OCR using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting the large images to Google Document by OCR using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When the image size, the image file size, the resolution of the image, and so on are large, an error like &lt;code&gt;Request Too Large&lt;/code&gt; occurs. In this sample script, such the image can be converted to Google Document by reducing them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Detecting Cells with Quote Prefix in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/09/06/detecting-cells-with-quote-prefix-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Tue, 06 Sep 2022 14:05:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/06/detecting-cells-with-quote-prefix-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a17d291c9d3da8fbce0d100139d3c872&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220906a/fig1.gif&#34;&#xA;     alt=&#34;Detecting Cells with Quote Prefix in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for detecting cells with the quote prefix in Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;For example, when a value is put to a cell by adding a single quote &lt;code&gt;&#39;&lt;/code&gt; as the top character, the cell value is used as the string value. This is the current specification. Under this condition, when the cells with the value of the quote prefix are tried to be detected, unfortunately, in the current stage, it seems that there is no method for directly achieving this in the methods of Spreadsheet service (SpreadsheetApp).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Rule of Item IDs for Questions of Google Forms</title>
      <link>https://tanaikech.github.io/2022/09/02/report-rule-of-item-ids-for-questions-of-google-forms/</link>
      <pubDate>Fri, 02 Sep 2022 09:29:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/09/02/report-rule-of-item-ids-for-questions-of-google-forms/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f391fd4d596d45bb846d374ff0ded695&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a report related to the rule of item IDs for questions of Google Forms.&lt;/p&gt;&#xA;&lt;p&gt;When the questions are created using the method of batchUpdate with Google Forms API, the created questions have the item IDs when the item IDs are not given in the request body. ( &lt;a href=&#34;https://developers.google.com/forms/api/reference/rest/v1/forms#item&#34;&gt;https://developers.google.com/forms/api/reference/rest/v1/forms#item&lt;/a&gt; ) For example, when you want to create a question and update the created question in one API call, it is required to include the custom item ID in the request body. But, it seems that in the current stage, the information of the item ID has never been published. So, in this report, I would like to consider the rule of item IDs of questions for Google Forms API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Process Cost of Google Apps Script During Large Calculations by Formulas on Google Spreadsheet</title>
      <link>https://tanaikech.github.io/2022/08/31/report-process-cost-of-google-apps-script-during-large-calculations-by-formulas-on-google-spreadsheet/</link>
      <pubDate>Wed, 31 Aug 2022 15:04:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/31/report-process-cost-of-google-apps-script-during-large-calculations-by-formulas-on-google-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/455ae803fae6a9aba31a928ce5a16c1d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220831a/fig1.png&#34;&#xA;     alt=&#34;Report: Process Cost of Google Apps Script During Large Calculations by Formulas on Google Spreadsheet&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Today, I found a question ( &lt;a href=&#34;https://stackoverflow.com/q/73540735&#34;&gt;https://stackoverflow.com/q/73540735&lt;/a&gt; ) in Stackoverflow by Max Makhrov. When I saw this question, I thought that this is a good raising question. In this question, it has reported that when the Spreadsheet includes the formulas of the large calculation, when a Google Apps Script is run during the calculation of the formulas is running, the processing time of the script becomes long.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updating Same Position on Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/08/25/updating-same-position-on-google-document-using-google-apps-script/</link>
      <pubDate>Thu, 25 Aug 2022 10:34:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/25/updating-same-position-on-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/36a2a9d393f42274a833e5660bfe4ce0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220825a/fig1.gif&#34;&#xA;     alt=&#34;Updating Same Position on Google Document using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for updating the same position on Google Document using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In this case, the named range is used. About the named range on Google Document, in the current stage, unfortunately, this cannot be used with the UI on Google Document. And, when I saw the official document of named range, I thought that this might be a bit difficult. &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/named-range&#34;&gt;Ref&lt;/a&gt; &lt;a href=&#34;https://developers.google.com/docs/api/how-tos/named-ranges&#34;&gt;Ref&lt;/a&gt; So, I have created a Google Apps Script for managing the named range on Google Document. &lt;a href=&#34;https://github.com/tanaikech/DocNamedRangeApp&#34;&gt;Ref&lt;/a&gt; In this post, I would like to introduce a sample script for updating the same position on Google Document using this GAS library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My report has been published at Champion Innovators Content Library</title>
      <link>https://tanaikech.github.io/2022/08/24/my-report-has-been-published-at-champion-innovators-content-library/</link>
      <pubDate>Wed, 24 Aug 2022 16:18:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/24/my-report-has-been-published-at-champion-innovators-content-library/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220824a/fig1.png&#34;&#xA;     alt=&#34;My report has been published at Champion Innovators Content Library&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;My report has been published at &lt;a href=&#34;https://cloud.google.com/innovators/champions/content#/topics=Google_Apps_Script,Google_Workspace&#34;&gt;Champion Innovators Content Library&lt;/a&gt;. The published report is &lt;a href=&#34;https://github.com/tanaikech/taking-advantage-of-google-apps-script&#34;&gt;Taking Advantage of Google Apps Script&lt;/a&gt;. If this report will be useful, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Efficiently Creating Web Apps using a Google Apps Script library</title>
      <link>https://tanaikech.github.io/2022/08/20/report-efficiently-creating-web-apps-using-a-google-apps-script-library/</link>
      <pubDate>Sat, 20 Aug 2022 14:00:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/20/report-efficiently-creating-web-apps-using-a-google-apps-script-library/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/90ac88cf1a74989e649a4e49a5ed1ab9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for efficiently creating Web Apps using a Google Apps Script library.&lt;/p&gt;&#xA;&lt;p&gt;When a Google Apps Script library is used for creating Web Apps, the following advantage can be obtained.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The script of the client-side can be simpler. Because most scripts for constructing Web Apps are included in the Google Apps Script library.&lt;/li&gt;&#xA;&lt;li&gt;When the script of Web Apps (In this case, the script of Google Apps Script library is modified.) is modified, the latest script is reflected in the Web Apps, immediately. Because when the Google Apps Script library is used as the latest version when the script of the library is modified, the client can use the latest script of the library, immediately. So, the downtime of Web Apps can be reduced.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By this, it is not required to manually reflect the latest version of the script to the Web Apps.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;When you can change the script of Web Apps by changing the deployed version of the library.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The sample script for explaining this is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: High-Efficiency Finding and Replacing Many Values in Google Spreadsheet with Low Process Cost using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/08/19/benchmark-high-efficiency-finding-and-replacing-many-values-in-google-spreadsheet-with-low-process-cost-using-google-apps-script/</link>
      <pubDate>Fri, 19 Aug 2022 15:11:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/19/benchmark-high-efficiency-finding-and-replacing-many-values-in-google-spreadsheet-with-low-process-cost-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6fc2f3ea6d09ce2906e7922c76c0b238&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220819a/fig1.png&#34;&#xA;     alt=&#34;Benchmark: High-Efficiency Finding and Replacing Many Values in Google Spreadsheet with Low Process Cost using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for high-efficiency finding and replacing many values in Google Spreadsheet with the low process cost using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When the various values are replaced in Google Spreadsheet using Google Apps Script, I&amp;rsquo;m worried about the process cost. So, in this report, I would like to introduce a sample script for high-efficiency achieving this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updating Destination Sheet by Source Sheet in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/08/18/updating-destination-sheet-by-source-sheet-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Thu, 18 Aug 2022 14:50:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/18/updating-destination-sheet-by-source-sheet-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9970ebf1bd3c7475df57126f5d544f89&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for updating the destination sheet by the source sheet in Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The sample situation is as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220818a/fig1.png&#34;&#xA;     alt=&#34;Updating Destination Sheet by Source Sheet in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetNames&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet2&amp;#34;&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Retrieve values from source and destination sheets.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;srcSheet&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dstSheet&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetNames&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;srcValues&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dstValues&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;srcSheet&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dstSheet&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getDataRange&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getValues&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Create an array for updating the destination sheet.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;srcObj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;srcValues&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) =&amp;gt; ((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;), {});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ...&lt;span style=&#34;color:#a6e22e&#34;&gt;dstValues&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(([&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;]) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;srcObj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;srcObj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;delete&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;srcObj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ...Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;srcObj&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Update the destination sheet.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;dstSheet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setValues&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In this sample script, &amp;ldquo;Sheet1&amp;rdquo; and &amp;ldquo;Sheet2&amp;rdquo; are the source and destination sheets, respectively.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moving Cell Detection on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/08/17/moving-cell-detection-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 17 Aug 2022 11:05:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/17/moving-cell-detection-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5939e3de5e24ce389beade94158bdb7d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220817b/fig1.gif&#34;&#xA;     alt=&#34;Moving Cell Detection on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for detecting whether the specific cells on Google Spreadsheet are manually moved using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In this case, the named range, OnChange trigger, and PropertiesService are used.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage:&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-create-a-named-range&#34;&gt;1. Create a named range.&lt;/h3&gt;&#xA;&lt;p&gt;As a sample, please create a named range to the cells &amp;ldquo;A2:B2&amp;rdquo; as &amp;ldquo;sampleNamedRange1&amp;rdquo;. &lt;a href=&#34;https://support.google.com/docs/answer/63175&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-prepare-sample-script&#34;&gt;2. Prepare sample script.&lt;/h3&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Spreadsheet. And, &lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually&#34;&gt;please install OnChange trigger to the function &lt;code&gt;installedOnChange&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using RichTextValues with Custom Function on Google Spreadsheet</title>
      <link>https://tanaikech.github.io/2022/08/17/using-richtextvalues-with-custom-function-on-google-spreadsheet/</link>
      <pubDate>Wed, 17 Aug 2022 09:11:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/17/using-richtextvalues-with-custom-function-on-google-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1d63fcd5152688da68e9974167ca744f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220817a/fig1.gif&#34;&#xA;     alt=&#34;Using RichTextValues with Custom Function on Google Spreadsheet&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this post, I would like to introduce the method for using RichTextValue with a custom function of Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;This sample is for &lt;a href=&#34;https://stackoverflow.com/q/73367517/7108653&#34;&gt;this thread in Stackoverflow&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this thread, the OP&amp;rsquo;s goal is as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Put a text to a cell. In this case, use a hyperlink in a part of the text.&lt;/li&gt;&#xA;&lt;li&gt;This is required to be achieved using a custom function.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In the current stage, in order to reflect the hyperlink in a part of the text, it is required to use &lt;code&gt;setRichTextValue&lt;/code&gt; of Google Apps Script. In this case, this method cannot be used with the custom function. This is the current specification.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Icons of each mimeType on Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/08/13/retrieving-icons-of-each-mimetype-on-google-drive-using-google-apps-script/</link>
      <pubDate>Sat, 13 Aug 2022 16:24:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/13/retrieving-icons-of-each-mimetype-on-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1c0bd1e88b67f19b77d79c9f631b001d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220813a/fig1.png&#34;&#xA;     alt=&#34;Retrieving Icons of each mimeType on Google Drive using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving icons of each mimeType on Google Drive using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Sample list of &lt;code&gt;mimeType&lt;/code&gt; is from &lt;a href=&#34;https://developers.google.com/drive/api/guides/mime-types&#34;&gt;this official document&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getIcons&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;iconSize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;256&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Pixels&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeTypes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.audio&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.document&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.drive-sdk&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.drawing&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.file&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.folder&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.form&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.fusiontable&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.jam&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.map&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.photo&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.presentation&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.script&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.shortcut&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.site&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.spreadsheet&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.unknown&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.video&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;imageUrls&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeTypes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`https://drive-thirdparty.googleusercontent.com/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;iconSize&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/type/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blobs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetchAll&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;imageUrls&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mimeTypes&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.png`&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blobs&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sampleIcons.zip&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When this script is run, a ZIP file including icons is created to the root folder.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Challenging Exporting Selected Cells on Spreadsheet as Image using Google Apps Script and Javascript</title>
      <link>https://tanaikech.github.io/2022/08/10/report-challenging-exporting-selected-cells-on-spreadsheet-as-image-using-google-apps-script-and-javascript/</link>
      <pubDate>Wed, 10 Aug 2022 10:57:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/10/report-challenging-exporting-selected-cells-on-spreadsheet-as-image-using-google-apps-script-and-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fbf47fe7b8e3e57ee49f24563550c113&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;updated-on-january-25-2024&#34;&gt;Updated on January 25, 2024&lt;/h1&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview:&lt;/h2&gt;&#xA;&lt;p&gt;This is a report for challenging exporting the selected cells on Spreadsheet as an image using Google Apps Script and Javascript.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220810a/fig1.gif&#34;&#xA;     alt=&#34;Report: Challenging Exporting Selected Cells on Spreadsheet as Image using Google Apps Script and Javascript&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description:&lt;/h2&gt;&#xA;&lt;p&gt;This report is based on &lt;a href=&#34;https://stackoverflow.com/q/73204237/7108653&#34;&gt;this question by Max Makhrov&lt;/a&gt;. When I saw this question, I remembered that there are many questions for asking this in Stackoverflow. And, I thought that when this is achieved, it will be useful for the owner of this question and a lot of users. So, I have discussed this in his question.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Javascript library - CropImageByBorder_js</title>
      <link>https://tanaikech.github.io/2022/08/09/javascript-library-cropimagebyborder_js/</link>
      <pubDate>Tue, 09 Aug 2022 16:44:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/09/javascript-library-cropimagebyborder_js/</guid>
      <description>&lt;h2 id=&#34;javascript-library-for-cropping-image-by-border&#34;&gt;Javascript Library for Cropping Image by Border&lt;/h2&gt;&#xA;&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;&#xA;&lt;p&gt;This is a Javascript library for cropping images by the border.&lt;/p&gt;&#xA;&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;&#xA;&lt;p&gt;When an image is used, there is a case where I wanted to simply crop the image by a script. In this Javascript library, the image is cropped by a border. The sample situation is as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220809a/fig1.png&#34;&#xA;     alt=&#34;Javascript library - CropImageByBorder_js&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this sample situation, a red rectangle is enclosed by a border (1 pixel) with &amp;ldquo;#000000&amp;rdquo;. By this border, this library crops the red rectangle. In this case, the 1-pixel border is not included in the resulting image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clearing Discrete Cell Values on Multiple Sheets using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/08/08/clearing-discrete-cell-values-on-multiple-sheets-using-google-apps-script/</link>
      <pubDate>Mon, 08 Aug 2022 08:57:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/08/clearing-discrete-cell-values-on-multiple-sheets-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6b1ce61475e35416ce0e728a7fd3018c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for clearing the discrete cell values on multiple sheets using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;There might be a case where you want to clear the values of the discrete cells in the multiple sheets using Google Apps Script. In this post, I would like to introduce the efficient script for achieving this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-1&#34;&gt;Sample script 1&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of the Google Spreadsheet you want to use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sample Script for Resumable Upload to Google Drive using Axios with Node.js</title>
      <link>https://tanaikech.github.io/2022/08/07/sample-script-for-resumable-upload-to-google-drive-using-axios-with-node.js/</link>
      <pubDate>Sun, 07 Aug 2022 09:26:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/07/sample-script-for-resumable-upload-to-google-drive-using-axios-with-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5212f2a8127e1c0a70c8642e298ae661&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for the resumable upload using Axios with Node.js.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;In this sample script, as a sample situation in order to explain the resumable upload, the file data is loaded from the local PC, and the data is uploaded to Google Drive with the resumable upload.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;axios&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;axios&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fs&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;promises&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sample&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;filepath&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the filename and file path of the upload file.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;new_access_token&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your access token.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the filename on Google Drive.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the mimeType of the uploading file. I thought that when this might not be required to be used.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 1. Prepare chunks from loaded file data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;262144&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// This is a sample chunk size.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;readFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;filepath&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileSize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;array&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Int8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;)];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunks&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...Array(Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;ceil&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;array&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;))].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Buffer&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Int8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;array&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;splice&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 2. Retrieve endpoint for uploading a file.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;axios&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;Authorization&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Bearer &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;new_access_token&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt; }),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; } &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 3. Upload the data using chunks.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunks&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;end&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunks&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;axios&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PUT&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Range&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`bytes &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fileSize&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chunks&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }).&lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;(({ &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt; }) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;message&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;end&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;res2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sample&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;testing&#34;&gt;Testing&lt;/h2&gt;&#xA;&lt;p&gt;When this sample script is run, the following result is obtained.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating User&#39;s Dashboard by Inputting Name and Password using Web Apps with Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/08/01/creating-users-dashboard-by-inputting-name-and-password-using-web-apps-with-google-apps-script/</link>
      <pubDate>Mon, 01 Aug 2022 15:17:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/08/01/creating-users-dashboard-by-inputting-name-and-password-using-web-apps-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ac2537711bfcf19348b66b454da33196&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating the user&amp;rsquo;s dashboard by inputting the user name and password using Web Apps with Google Apps Script. In this case, Google Spreadsheet is used as a database of the dashboard.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-create-a-google-apps-script-project&#34;&gt;1. Create a Google Apps Script project.&lt;/h3&gt;&#xA;&lt;p&gt;In order to use Web Apps, please create a new Google Apps Script project. In this case, please create a new Spreadsheet and open the script editor of Spreadsheet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Names of Month and Day of Week using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/07/30/retrieving-names-of-month-and-day-of-week-using-google-apps-script/</link>
      <pubDate>Sat, 30 Jul 2022 09:24:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/07/30/retrieving-names-of-month-and-day-of-week-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/be6ef51a402aacb9fa24277dffed63bc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the names of month and day of week using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;I think that you might have a case that you want to retrieve the names of month and day of week using Google Apps Script. This sample script retrieves them using a simple script.&lt;/p&gt;&#xA;&lt;p&gt;Using &lt;code&gt;Utilities.formatDate&lt;/code&gt; of Google Apps Script, the names of month and day of week can be retrieved using a simple script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Checking Exchange Rate using GOOGLEFINANCE with Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/07/28/checking-exchange-rate-using-googlefinance-with-google-apps-script/</link>
      <pubDate>Thu, 28 Jul 2022 16:29:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/07/28/checking-exchange-rate-using-googlefinance-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/67e0cd1f5ba4946aa050963a0720ed5f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220729a/fig1.png&#34;&#xA;     alt=&#34;Checking Exchange Rate using GOOGLEFINANCE with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for checking the exchange rate using GOOGLEFINANCE with Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I have published a report of &amp;ldquo;Report: Obtaining Values from GOOGLEFINANCE using Google Apps Script&amp;rdquo;. &lt;a href=&#34;https://tanaikech.github.io/2022/05/18/report-obtaining-values-from-googlefinance-using-google-apps-script/&#34;&gt;Ref&lt;/a&gt; In this post, I would like to introduce a sample script for checking the exchange rate using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Spreadsheet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing Images on Google Document in Order using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/07/27/replacing-images-on-google-document-in-order-using-google-apps-script/</link>
      <pubDate>Wed, 27 Jul 2022 09:19:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/07/27/replacing-images-on-google-document-in-order-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1f3407674aafcba906a3528e7ec3463d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220727a/fig1.png&#34;&#xA;     alt=&#34;Replacing Images on Google Document in Order using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for replacing images on Google Document in order using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;This sample script uses Drive API and Docs API. So, please enable Drive API and Docs API at Advanced Google services. &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enable_advanced_services&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, the images on Google Document are replaced with the image files on your Google Drive in order. Each image in Document is replaced in order of file Ids in &lt;code&gt;fileIds&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Management of Images on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/07/23/report-management-of-images-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Sat, 23 Jul 2022 10:45:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/07/23/report-management-of-images-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7ecb785ab9d4418d0c48ea853df8d1c8&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220723a/fig3.png&#34;&#xA;     alt=&#34;Report: Management of Images on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a report for management of images on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;At October 30, 2018, Cass OverGridImage and the method of inserImage have been added to Spreadsheet Service. &lt;a href=&#34;https://developers.google.com/apps-script/releases/2018#october_30_2018&#34;&gt;Ref&lt;/a&gt; At January 19, 2022, Class CellImageBuilder and Class CellImage have been added to Spreadsheet Service. &lt;a href=&#34;https://developers.google.com/apps-script/releases#january_19_2022&#34;&gt;Ref&lt;/a&gt; By these Classes and methods, the images got to be able to be managed on Google Spreadsheet. But, when the image is used to the various situations, there are the cases that it is required to ingenuity to manage the images. So, in this report, I would like to introduce the management of images on Google Spreadsheet using the sample scripts of Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Documentation Comments including JsDoc for Functions of Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/07/20/report-documentation-comments-including-jsdoc-for-functions-of-google-apps-script/</link>
      <pubDate>Wed, 20 Jul 2022 10:24:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/07/20/report-documentation-comments-including-jsdoc-for-functions-of-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5615cfc34e1d41659e934a7bcbaa27cf&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a report for the documentation comments for the functions of Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When the documentation comments for functions of Google Apps Script are considered, you will think JsDoc. At Google Apps Script, a part of JsDoc can be used. But, in this report, I would like to introduce the documentation comments including JsDoc.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-situations&#34;&gt;Sample situations&lt;/h2&gt;&#xA;&lt;h3 id=&#34;sample-1&#34;&gt;Sample 1&lt;/h3&gt;&#xA;&lt;p&gt;For example, when the following sample function is written,&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Process cost for Parsing XML data using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/07/14/benchmark-process-cost-for-parsing-xml-data-using-google-apps-script/</link>
      <pubDate>Thu, 14 Jul 2022 14:03:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/07/14/benchmark-process-cost-for-parsing-xml-data-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d09fb02c93635c53312aff58a047eb13&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In order to retrieve the values from XML data, when XML data is parsed using Google Apps Script, there are several methods for parsing the data. Class XmlService, which is a built-in Class for managing XML data, might be the first way to come up with it. At Stackoverflow, it is posted questions that XML data is often parsed using Class XmlService. It is considered that Class XmlService is suitable for managing XML data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Values of Dropdown List of Smart Chips on Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/07/10/retrieving-values-of-dropdown-list-of-smart-chips-on-google-document-using-google-apps-script/</link>
      <pubDate>Sun, 10 Jul 2022 14:37:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/07/10/retrieving-values-of-dropdown-list-of-smart-chips-on-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/37a8498ecb392e8b23041ce238287e27&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the values of dropdown list of the smart chips on Google Document using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;At August 23, 2021, 3 Classes for retrieving the smart chips have been added to Google Apps Script. But, in the current stage, unfortunately, all values of the smart chips cannot be retrieved by the Classes. For example, the dropdown list of the smart chips cannot be retrieved using the 3 Classes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Removing Invalid Named Ranges from Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/07/06/removing-invalid-named-ranges-from-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 06 Jul 2022 10:38:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/07/06/removing-invalid-named-ranges-from-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f9b993c4a178291324e03eeb5c161c1d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for removing the invalid named range of #REF from Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;issue-and-workaround&#34;&gt;Issue and workaround&lt;/h2&gt;&#xA;&lt;p&gt;For example, there are 2 sheets of &amp;ldquo;Sheet1&amp;rdquo; and &amp;ldquo;Sheet2&amp;rdquo; in a Google Spreadsheet. A new named range of &lt;code&gt;sample&lt;/code&gt; is created for the range of &lt;code&gt;Sheet1!A1&lt;/code&gt;, and remove the sheet of &amp;ldquo;Sheet1&amp;rdquo;. By this flow, when the named range list is checked by UI on Spreadsheet, &lt;code&gt;sample&lt;/code&gt; has &lt;code&gt;#REF&lt;/code&gt;. This is the invalid named range.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting A1Notation to GridRange and vice versa using Google Apps Script without any Scopes</title>
      <link>https://tanaikech.github.io/2022/07/04/converting-a1notation-to-gridrange-and-vice-versa-using-google-apps-script-without-any-scopes/</link>
      <pubDate>Mon, 04 Jul 2022 11:39:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/07/04/converting-a1notation-to-gridrange-and-vice-versa-using-google-apps-script-without-any-scopes/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/457b5545a48890ed6dce66d67324ec47&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting A1Notation to GridRange and vice versa using Google Apps Script without any scopes.&lt;/p&gt;&#xA;&lt;p&gt;A1Notation and GridRange are often used with Sheets API. I have posted a sample script for converting A1Notation to GridRange before. &lt;a href=&#34;http://localhost:1313/2017/07/31/converting-a1notation-to-gridrange-for-google-sheets-api/&#34;&gt;Ref&lt;/a&gt; But, in that case, I used the method of Spreadsheet service (SpreadsheetApp). By this, in order to use the script, it is required to authorize the scopes. In this sample script, A1Notation can be converted to GridRange and vice versa with no scopes. Also, this sample script can be used for Javascript and Node.js.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shortening a Long URL using Firebase Dynamic Links API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/06/18/shortening-a-long-url-using-firebase-dynamic-links-api-with-google-apps-script/</link>
      <pubDate>Sat, 18 Jun 2022 11:08:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/06/18/shortening-a-long-url-using-firebase-dynamic-links-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e439cbaadf363380fe026b380dd4de42&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for shortening a long URL using Firebase Dynamic Links API with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;important&#34;&gt;IMPORTANT&lt;/h2&gt;&#xA;&lt;p&gt;Before you use this script, please create a new Firebase project and link it to your Google Cloud Platform Project. &lt;a href=&#34;https://console.firebase.google.com/&#34;&gt;Ref&lt;/a&gt; And, please enable Firebase Dynamic Links API at the API console. And then, please create your API key from your Google Cloud Platform Project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apiKey&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your API key.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;longUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the long URL you want to shorten.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yourDynamicLinkDomain&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your dynamic link domain.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apiKey&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;payload&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;dynamicLinkInfo&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;dynamicLinkDomain&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yourDynamicLinkDomain&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;longUrl&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;contentType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;shortLink&lt;/span&gt; } &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;shortLink&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;When this script is run, &lt;code&gt;longUrl&lt;/code&gt; is shortened.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;&#xA;&lt;p&gt;If the warning of &lt;code&gt;Setup URL patterns to whitelist in the Firebase Dynamic Links console.&lt;/code&gt; is shown, please include the URL to the whitelist to &amp;ldquo;Allowlist URL pattern&amp;rdquo;. &lt;a href=&#34;https://support.google.com/firebase/answer/9021429?hl=en&#34;&gt;Ref&lt;/a&gt; By this, the warning can be removed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Protecting Cells of Spreadsheet by Clicking Checkbox using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/06/16/protecting-cells-of-spreadsheet-by-clicking-checkbox-using-google-apps-script/</link>
      <pubDate>Thu, 16 Jun 2022 11:13:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/06/16/protecting-cells-of-spreadsheet-by-clicking-checkbox-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1da4d8e8ebb2cdc62e6c42c6e71f14d7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for protecting the cells of a Spreadsheet by clicking a checkbox using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;You might have a situation where you want to protect the cells when a user checks a checkbox. This sample script is for achieving this situation. The demonstration of this sample script is as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;This demonstration is for a user. You can see that when the checkbox is checked, the checkbox and the right side of the checkbox are protected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parsing XML Data in Google Apps Script using IMPORTXML</title>
      <link>https://tanaikech.github.io/2022/06/15/parsing-xml-data-in-google-apps-script-using-importxml/</link>
      <pubDate>Wed, 15 Jun 2022 11:59:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/06/15/parsing-xml-data-in-google-apps-script-using-importxml/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f4e6091c1de4873695783471e410f07a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220615a/fig1.png&#34;&#xA;     alt=&#34;Parsing XML Data in Google Apps Script using IMPORTXML&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample flow for parsing XML data in Google Apps Script using IMPORTXML. Recently, it seems that &lt;code&gt;ContentService.MimeType.XML&lt;/code&gt; has been removed by the Google side. By this, in the current stage, the XML data cannot be directly loaded by the Web Apps URL with IMPORTXML. From this current situation, I would like to introduce a workaround. In this workaround, the XML data in Google Apps Script is parsed by IMPORTXML of the built-in function of Google Spreadsheet. By this workaround, I thought that this will be useful for testing a custom XML data using IMPORTXML.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Recent Value of ScriptApp.getService().getUrl() in Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/06/11/report-recent-value-of-scriptapp.getservice.geturl-in-google-apps-script/</link>
      <pubDate>Sat, 11 Jun 2022 09:52:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/06/11/report-recent-value-of-scriptapp.getservice.geturl-in-google-apps-script/</guid>
      <description>&lt;p&gt;There is a method of &lt;code&gt;ScriptApp.getService().getUrl()&lt;/code&gt; for obtaining the Web Apps URL in Google Apps Script.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Before the V8 runtime is released, this method had returned the endpoint like &lt;code&gt;https://script.google.com/macros/s/{deploymentId}/exec&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;After the V8 runtime was released, the endpoint of &lt;code&gt;https://script.google.com/macros/s/{deploymentId}/dev&lt;/code&gt; was returned.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Now, it seems that this returns &lt;code&gt;https://script.google.com/macros/s/###/exec&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But, in the current stage, when I access this endpoint, the message of &lt;code&gt;Sorry, unable to open the file at this time. Please check the address and try again.&lt;/code&gt; is returned. So, I tried to search the deployment ID of &lt;code&gt;###&lt;/code&gt; from &lt;code&gt;https://script.google.com/macros/s/###/exec&lt;/code&gt; returned with current &lt;code&gt;ScriptApp.getService().getUrl()&lt;/code&gt;. But, unfortunately, I cannot find the deployment ID. I&amp;rsquo;m worried that this might be related to the error.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Process cost for HTML Template using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/06/07/benchmark-process-cost-for-html-template-using-google-apps-script/</link>
      <pubDate>Tue, 07 Jun 2022 11:35:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/06/07/benchmark-process-cost-for-html-template-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f1436d88423077115d2c249862f12f17&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;When we use HTML in the Google Apps Script project, in order to show the values from the Google Apps Script side, the HTML template is used. When I used the HTML template with a large value, I understood that the process cost can be reduced by devising a script. In this report, I would like to introduce the process cost of the HTML template using the benchmark.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Publishing Various Google Docs with Same URL using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/06/03/report-publishing-various-google-docs-with-same-url-using-google-apps-script/</link>
      <pubDate>Fri, 03 Jun 2022 11:26:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/06/03/report-publishing-various-google-docs-with-same-url-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/94810f7947361bef398ac9f301b9afde&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample method for publishing various Google Docs files with the same URL using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;By updating on May 25, 2022, the content got to be able to be embedded as a full page in the new Google site. &lt;a href=&#34;https://tanaikech.github.io/2022/06/02/embed-content-as-a-full-page-in-new-google-sites/&#34;&gt;Ref&lt;/a&gt; In this method, this is used.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220603a/fig1.png&#34;&#xA;     alt=&#34;Report: Publishing Various Google Docs with Same URL using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-create-a-google-docs&#34;&gt;1. Create a Google Docs.&lt;/h3&gt;&#xA;&lt;p&gt;First, as a simple sample, please create a new Google Spreadsheet. And please copy the URL like &lt;code&gt;https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Embed content as a full page in new Google Sites</title>
      <link>https://tanaikech.github.io/2022/06/02/embed-content-as-a-full-page-in-new-google-sites/</link>
      <pubDate>Thu, 02 Jun 2022 10:11:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/06/02/embed-content-as-a-full-page-in-new-google-sites/</guid>
      <description>&lt;p&gt;By updating on May 25, 2022, the content got to be able to be embedded as a full page in the new Google site. &lt;a href=&#34;https://workspaceupdates.googleblog.com/2022/05/embed-content-as-full-page-in-new.html&#34;&gt;Ref&lt;/a&gt;. This is very good news for me.&lt;/p&gt;&#xA;&lt;p&gt;For example, with this update, the Web Apps created by Google Apps Script can be published by embedding to the Google site as a full page. By this, the URL of the Google site, and Google Analytics can be used. I have already changed my Web Applications. You can see them at &lt;a href=&#34;https://tanaikech.github.io/webapps/&#34;&gt;https://tanaikech.github.io/webapps/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing Values in Cells on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/30/replacing-values-in-cells-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 30 May 2022 11:15:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/30/replacing-values-in-cells-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cedc350cf36865b7a84e260c78762db9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for replacing values in the cells on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-situation&#34;&gt;Sample situation&lt;/h2&gt;&#xA;&lt;p&gt;The sample situation is as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220530a/fig1.png&#34;&#xA;     alt=&#34;Replacing Values in Cells on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;This sample script used Sheets API. So, please enable Sheets API at Advanced Google services.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sample1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ab&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sample2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cd&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sample3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ef&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sample4&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gh&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sample5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ij&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sample6&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;kl&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sample7&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mn&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sample8&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;op&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sample9&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;qr&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetId&lt;/span&gt;(); &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the sheet name you want to use this script.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;requests&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;entries&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(([&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;]) =&amp;gt; ({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;findReplace&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;find&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;)`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;matchCase&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetId&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;replacement&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;]`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;requests&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;findReplace&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;find&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;,&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;matchCase&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;replacement&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Spreadsheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;batchUpdate&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;requests&lt;/span&gt; }, &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;In this script, one sheet is used. Also, you can use this script to all sheets in a Google Spreadsheet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#findreplacerequest&#34;&gt;FindReplaceRequest&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Uploading Files to Google Drive with Asynchronous Process using Python</title>
      <link>https://tanaikech.github.io/2022/05/28/uploading-files-to-google-drive-with-asynchronous-process-using-python/</link>
      <pubDate>Sat, 28 May 2022 09:45:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/28/uploading-files-to-google-drive-with-asynchronous-process-using-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a4cfbea4935b8c281d1f6abb91016705&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for uploading files to Google Drive with asynchronous process using Python.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; aiohttp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; asyncio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;folder_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Please set the folder ID you want to put.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Please set your access token.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/upload/drive/v3/files&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;workers&lt;/span&gt;(file):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; aiohttp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ClientSession() &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; session:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        metadata &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: file[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;filename&amp;#34;&lt;/span&gt;], &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;parents&amp;#34;&lt;/span&gt;: [folder_id]}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; aiohttp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;FormData()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        data&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_field(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;metadata&amp;#34;&lt;/span&gt;, json&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;dumps(metadata), content_type&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/json; charset=UTF-8&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        data&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_field(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt;, open(file[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;], &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        headers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bearer &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; token}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        params &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;uploadType&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;multipart&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; session&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;post(url, data&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;data, params&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;params, headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;headers) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; resp:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; resp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;json()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# Please set the filenames and the file paths as follows.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    fileList &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;filename&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./sample1.png&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    works &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [asyncio&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;create_task(workers(e)) &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; e &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; fileList]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; asyncio&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;gather(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;works)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(res)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;asyncio&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run(main())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;When this script is run, the files of &lt;code&gt;fileList&lt;/code&gt; are uploaded to Google Drive with the asynchronous process.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This sample supposes that your access token can be used for uploading files to Google Drive using Drive API. Please be careful about this.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I answered this sample script for &lt;a href=&#34;https://stackoverflow.com/q/72399888/7108653&#34;&gt;this thread of Stackoverflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Parsing JSON Data Array by Expanding Header Row using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/25/parsing-json-data-array-by-expanding-header-row-using-google-apps-script/</link>
      <pubDate>Wed, 25 May 2022 17:10:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/25/parsing-json-data-array-by-expanding-header-row-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d905b75175bd297733f807e7bddd33d4&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for parsing JSON data array by expanding the header row using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    { &lt;span style=&#34;color:#a6e22e&#34;&gt;key4&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key6&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    { &lt;span style=&#34;color:#a6e22e&#34;&gt;key7&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key8&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key9&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; (Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;) =&amp;gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;)), &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;), [])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;))];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSheet&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;clearContents&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;setValues&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;testing&#34;&gt;Testing&lt;/h2&gt;&#xA;&lt;p&gt;When this script is run, the following result is obtained. It is found that the header row is expanded by including all keys.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RichTextApp</title>
      <link>https://tanaikech.github.io/2022/05/25/updated-gas-library-richtextapp/</link>
      <pubDate>Wed, 25 May 2022 12:03:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/25/updated-gas-library-richtextapp/</guid>
      <description>&lt;h2 id=&#34;richtextapp-was-updated-to-v140&#34;&gt;RichTextApp was updated to v1.4.0&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/RichTextApp/raw/master/images/fig4b.png&#34;&#xA;     alt=&#34;Updated: GAS Library - RichTextApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.4.0 (May 25, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Added a new method of &lt;a href=&#34;https://github.com/tanaikech/RichTextApp#replaceTextToRichText&#34;&gt;&lt;code&gt;ReplaceTextToRichText&lt;/code&gt;&lt;/a&gt;. In this method, the text in a cell is converted to the richtext.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RichTextApp&#34;&gt;https://github.com/tanaikech/RichTextApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exporting Tabulator Data to Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/24/exporting-tabulator-data-to-google-drive-using-google-apps-script/</link>
      <pubDate>Tue, 24 May 2022 11:39:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/24/exporting-tabulator-data-to-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b0d83cd2f0a27f9cd778f3a1f167503e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for exporting the Tabulator data to Google Drive using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;As the sample, a dialog on Google Spreadsheet is used. So, please copy and paste the following scripts to the container-bound script of Google Spreadsheet.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220524a/fig1.png&#34;&#xA;     alt=&#34;Exporting Tabulator Data to Google Drive using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;google-apps-script-side-codegs&#34;&gt;Google Apps Script side: &lt;code&gt;Code.gs&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;saveFile&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(...&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)).&lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this script.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;openDialog&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getUi&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;showModalDialog&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;HtmlService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createHtmlOutputFromFile&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;index&amp;#34;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;html--javascript-side-indexhtml&#34;&gt;HTML &amp;amp; Javascript side: &lt;code&gt;index.html&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;link&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdnjs.cloudflare.com/ajax/libs/tabulator/5.2.4/css/tabulator.min.css&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;rel&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdnjs.cloudflare.com/ajax/libs/tabulator/5.2.4/js/tabulator.min.js&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;table&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ok&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onclick&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;download();&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;csv&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// In this sample, you can select &amp;#34;csv&amp;#34; or &amp;#34;json&amp;#34;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the filename.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;table&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Tabulator&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#table&amp;#34;&lt;/span&gt;, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [...Array(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      [...Array(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)].&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;) =&amp;gt; ((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;`sample&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`sample&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;autoColumns&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;downloadReady&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;fileContents&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FileReader&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;fr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onload&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;google&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          .&lt;span style=&#34;color:#a6e22e&#34;&gt;withSuccessHandler&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          .&lt;span style=&#34;color:#a6e22e&#34;&gt;saveFile&lt;/span&gt;([&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            [...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Int8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;target&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;)],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          ]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;fr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;readAsArrayBuffer&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;download&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;table&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;download&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When &lt;code&gt;openDialog&lt;/code&gt; is run with the script editor, a dialog is opened on Spreadsheet. And, you can see the table (as shown in the top of this post) and a button. When &amp;ldquo;ok&amp;rdquo; button is clicked, this table is exported as a CSV data and save it as a file in the root folder of Google Drive.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Requesting to Gate API v4 using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/24/requesting-to-gate-api-v4-using-google-apps-script/</link>
      <pubDate>Tue, 24 May 2022 09:04:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/24/requesting-to-gate-api-v4-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d0ea117b1c0e54cf713a8027f6b2fb08&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for requesting to Gate API v4 using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The official document of Gate API v4 is &lt;a href=&#34;https://www.gate.io/developers&#34;&gt;here&lt;/a&gt;. Recently, I answered &lt;a href=&#34;https://stackoverflow.com/q/72340774/7108653&#34;&gt;this thread&lt;/a&gt;. In that case, in order to convert the sample python script to Google Apps Script, the script for retrieving the signature might be a bit complicated. So, here, I would like to introduce this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-python-script-from-official-document&#34;&gt;Sample python script from official document&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample python script from official document.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Text Positions in Text Data using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/23/retrieving-text-positions-in-text-data-using-google-apps-script/</link>
      <pubDate>Mon, 23 May 2022 13:55:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/23/retrieving-text-positions-in-text-data-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/77fbac03f26e1c1688f54130a683f8c0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the text positions in the text data using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;For example, in order to set the rich text style the part of text from the text data, this sample script will be useful.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-situation-1&#34;&gt;Sample situation 1&lt;/h2&gt;&#xA;&lt;p&gt;The sample situation is as follows.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sample1, sample2, sample3, sample4, sample5&#xD;&#xA;sample1, sample2, sample3, sample4, sample5&#xD;&#xA;sample1, sample2, sample3, sample4, sample5&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this sample, the text positions of &lt;code&gt;sample2&lt;/code&gt; and &lt;code&gt;sample5&lt;/code&gt; are retrieved from this sample text data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving and Parsing XML data from Google Workspace Update Blog and Putting it to Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/21/retrieving-and-parsing-xml-data-from-google-workspace-update-blog-and-putting-it-to-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Sat, 21 May 2022 14:44:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/21/retrieving-and-parsing-xml-data-from-google-workspace-update-blog-and-putting-it-to-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0ba501fecdfd1ac9b0f6997b370586b4&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving and parsing the XML data from Google Workspace Update Blog and putting it to Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;At Google Workspace Update Blog, the XML data is provided. By this, the retrieved XML data is parsed with XmlService, and the data is put to Google Spreadsheet. Recently, I got a request for this. So I created this sample script. When this was useful for your situation, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving subscriberCount of Channel from Video URLs of YouTube using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/21/retrieving-subscribercount-of-channel-from-video-urls-of-youtube-using-google-apps-script/</link>
      <pubDate>Sat, 21 May 2022 09:20:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/21/retrieving-subscribercount-of-channel-from-video-urls-of-youtube-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e3b4ac87437a3f358e0577c5854e00a6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the values of &lt;code&gt;subscriberCount&lt;/code&gt; of the channel from the video URLs of YouTube using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In this sample, the video URLs are retrieved from Spreadsheet. And, the retrieved values of &lt;code&gt;subscriberCount&lt;/code&gt; are put to the Spreadsheet. The sample Spreadsheet is as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220521a/fig1.png&#34;&#xA;     alt=&#34;Retrieving subscriberCount of Channel from Video URLs of YouTube using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Spreadsheet. Before you use this script, please enable YouTube Data API v3 at Advanced Google services. &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enable_advanced_services&#34;&gt;Ref&lt;/a&gt; And, please set the sheet name.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Splitting and Processing an Array every n length using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/21/splitting-and-processing-an-array-every-n-length-using-google-apps-script/</link>
      <pubDate>Sat, 21 May 2022 09:02:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/21/splitting-and-processing-an-array-every-n-length-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9e6276edb67d0ebde80ea378b6f79e20&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for splitting and processing an array every &lt;code&gt;n&lt;/code&gt; length using Google Apps Script. When I prepare a sample script with Google Apps Script, I sometimes have the situation that it is required to split and process an array every &lt;code&gt;n&lt;/code&gt; length. This sample script is for achieving this situation.&lt;/p&gt;&#xA;&lt;p&gt;Please set &lt;code&gt;limit&lt;/code&gt;. This sample script splits the sample array every 3 length.&lt;/p&gt;&#xA;&lt;p&gt;When you use this script with Google Apps Script, please enable V8 runtime.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Obtaining Values from GOOGLEFINANCE using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/18/report-obtaining-values-from-googlefinance-using-google-apps-script/</link>
      <pubDate>Wed, 18 May 2022 11:43:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/18/report-obtaining-values-from-googlefinance-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7bebb7c6d8ed6ddfdd825153ef71c47e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a report for obtaining the values from GOOGLEFINANCE using Google Apps Script. When I tested to retrieve the values from &lt;code&gt;GOOGLEFINANCE&lt;/code&gt; function on Google Spreadsheet using Google Apps Script, I noticed that the values can be retrieved.&lt;/p&gt;&#xA;&lt;p&gt;When I had tested this before, I had got the value of &lt;code&gt;#N/A&lt;/code&gt;. About retrieving the values from &lt;code&gt;GOOGLEFINANCE&lt;/code&gt; function on Google Spreadsheet, I had known &amp;ldquo;&lt;a href=&#34;https://gsuiteupdates.googleblog.com/2016/09/historical-googlefinance-data-no-longer.html&#34;&gt;Historical GOOGLEFINANCE data no longer accessible outside of Google Sheets&lt;/a&gt;&amp;rdquo;. By this situation, &lt;code&gt;#N/A&lt;/code&gt; had been returned when the value had been retrieved using a script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reducing Image Data Size using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/14/reducing-image-data-size-using-google-apps-script/</link>
      <pubDate>Sat, 14 May 2022 11:13:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/14/reducing-image-data-size-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/14c863e225162ec86894d604709d8b35&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for reducing the image data size using Google Apps Script. You might have a situation where you might want to reduce the data size of image data using Google Apps Script. Here, using Google Apps Script, I would like to introduce a sample script for reducing the data size of the image data by reducing the image quality.&lt;/p&gt;&#xA;&lt;h2 id=&#34;limitations&#34;&gt;Limitations&lt;/h2&gt;&#xA;&lt;p&gt;In the current stage, by the specification of Google side, there are the following limitations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Expanding Rows in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/11/expanding-rows-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 11 May 2022 11:43:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/11/expanding-rows-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d5d96ce34846110d67f82147b396b2b7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for expanding the rows in Google Spreadsheet using Google Apps Script. The sample situation is as follows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-situation&#34;&gt;Sample situation&lt;/h2&gt;&#xA;&lt;h3 id=&#34;input&#34;&gt;Input&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220511a/fig1.png&#34;&#xA;     alt=&#34;Expanding Rows in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;output&#34;&gt;Output&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220511a/fig2.png&#34;&#xA;     alt=&#34;Expanding Rows in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;expandedColumns&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;]; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the expanded columns you expect.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;delimiter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the delimiter.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;srcSheetName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the source sheet name.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dstSheetName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet2&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the destination sheet name.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;srcSheet&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dstSheet&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;srcSheetName&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dstSheetName&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;head&lt;/span&gt;, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;srcSheet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getDataRange&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getValues&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;head&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ...&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;flatMap&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; } &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;expandedColumns&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;delimiter&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        { &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {}, &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; [...Array(&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;)].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;) =&amp;gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;][&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;dstSheet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setValues&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;When this script is run, the above sample situation can be obtained.&lt;/li&gt;&#xA;&lt;li&gt;For example, when you change &lt;code&gt;const expandedColumns = [2, 3, 4, 5];&lt;/code&gt; to &lt;code&gt;const expandedColumns = [5];&lt;/code&gt;, only the column &amp;ldquo;E&amp;rdquo; is expanded.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Number of Requests for Sheets API using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/04/number-of-requests-for-sheets-api-using-google-apps-script/</link>
      <pubDate>Wed, 04 May 2022 15:51:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/04/number-of-requests-for-sheets-api-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dad5df2403b551f6bdd99221be115bef&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a report for checking the number of requests for Sheets API. I had contact about the quota for Sheets API. So, in order to explain this, I used the following simple sample scripts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-1&#34;&gt;Sample 1&lt;/h2&gt;&#xA;&lt;p&gt;This sample puts a value of &amp;ldquo;sample&amp;rdquo; to a cell &amp;ldquo;A1&amp;rdquo; using the batchUpdate method. This request body includes one request. When this script is run, one API quota is used.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sample1&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;spreadsheetId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;requests&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;updateCells&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rows&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;values&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;userEnteredValue&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stringValue&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;range&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sheetId&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;startRowIndex&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;endRowIndex&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;startColumnIndex&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;endColumnIndex&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fields&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;userEnteredValue.stringValue&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Spreadsheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;batchUpdate&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;requests&lt;/span&gt; }, &lt;span style=&#34;color:#a6e22e&#34;&gt;spreadsheetId&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-2&#34;&gt;Sample 2&lt;/h2&gt;&#xA;&lt;p&gt;This sample puts 1000 values like &amp;ldquo;sample#&amp;rdquo; to the cells of &amp;ldquo;B1:B1000&amp;rdquo; using the batchUpdate method. This request body includes 1000 requests. When this script is run, one API quota is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: CLI Tool - goris to v301</title>
      <link>https://tanaikech.github.io/2022/05/02/updated-cli-tool-goris-to-v301/</link>
      <pubDate>Mon, 02 May 2022 17:26:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/02/updated-cli-tool-goris-to-v301/</guid>
      <description>&lt;p&gt;goris is a CLI tool to search for images with Google Reverse Image Search.&lt;/p&gt;&#xA;&lt;p&gt;Today, it was updated to v3.0.1. Please check it out. &lt;a href=&#34;https://github.com/tanaikech/goris&#34;&gt;https://github.com/tanaikech/goris&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v3.0.1 (May 2, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;About the option &lt;code&gt;-w&lt;/code&gt;, a bug was resolved. By this, the URLs of the related Web site are returned. As the default, 10 URLs are returned. If you want to retrieve more, please use the option &lt;code&gt;-n&lt;/code&gt; like &lt;code&gt;-n 20&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Increasing Column Letter by One using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/05/01/increasing-column-letter-by-one-using-google-apps-script/</link>
      <pubDate>Sun, 01 May 2022 09:49:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/01/increasing-column-letter-by-one-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/13fc8683114c5ff62b8144c338a1d574&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for increasing the column letter by one using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;increase&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;charCodeAt&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;pow&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Ref: https://stackoverflow.com/a/53678158&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndexToLetter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;)) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndexToLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; String.&lt;span style=&#34;color:#a6e22e&#34;&gt;fromCharCode&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;65&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndexToLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;samples&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;AA&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;AZ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZZ&amp;#34;&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;increase&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;samples&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// &amp;lt;--- [ &amp;#39;B&amp;#39;, &amp;#39;AA&amp;#39;, &amp;#39;AB&amp;#39;, &amp;#39;BA&amp;#39;, &amp;#39;AAA&amp;#39; ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;When this script is used, the column letters of &lt;code&gt;[&amp;quot;A&amp;quot;, &amp;quot;Z&amp;quot;, &amp;quot;AA&amp;quot;, &amp;quot;AZ&amp;quot;, &amp;quot;ZZ&amp;quot;]&lt;/code&gt; is increased by one. As the result, &lt;code&gt;[ &#39;B&#39;, &#39;AA&#39;, &#39;AB&#39;, &#39;BA&#39;, &#39;AAA&#39; ]&lt;/code&gt; is obtained.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;testing&#34;&gt;Testing&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jsfiddle.net/r5ngtxj2/&#34;&gt;jsfiddle.net&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>GAS Library - DocNamedRangeApp</title>
      <link>https://tanaikech.github.io/2022/05/01/gas-library-docnamedrangeapp/</link>
      <pubDate>Sun, 01 May 2022 09:19:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/05/01/gas-library-docnamedrangeapp/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/DocNamedRangeApp/raw/master/images/fig1.gif&#34;&#xA;     alt=&#34;GAS Library - DocNamedRangeApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for managing the named range on Google Documents.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Google Document can use the named range. When the named range is used, the users can directly access the contents using the named range. For example, the developer can guide the users to the specific content in Google Documents using the named range. But, unfortunately, in the current stage, it seems that the named range cannot be directly used by the UI on Google Documents. It is required to use Google Apps Script. But, I thought that when I saw the official document of the named range, it might be difficult to understand it. &lt;a href=&#34;https://developers.google.com/apps-script/reference/document/named-range&#34;&gt;Ref&lt;/a&gt; So, I created this library. When this library is used, the named ranges on Google Documents can be managed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Analyzing Responses from Grid Items of Google Form using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/28/analyzing-responses-from-grid-items-of-google-form-using-google-apps-script/</link>
      <pubDate>Thu, 28 Apr 2022 13:55:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/28/analyzing-responses-from-grid-items-of-google-form-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/97c3cfd5c6e393de6a16ff6465300e4d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for analyzing the responses from Grid Items of Google Form using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In this sample situation, all responses are retrieved from Grid Items of Google Form, and the average values of each row of each question are calculated. And, the result is put on the Spreadsheet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-situation&#34;&gt;Sample situation&lt;/h2&gt;&#xA;&lt;h3 id=&#34;input-sample-google-form&#34;&gt;Input: Sample Google Form&lt;/h3&gt;&#xA;&lt;p&gt;The sample Google Form is as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220428a/fig1.png&#34;&#xA;     alt=&#34;Analyzing Responses from Grid Items of Google Form using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Handling 10,000,000 cells in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/25/report-handling-10000000-cells-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 25 Apr 2022 15:06:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/25/report-handling-10000000-cells-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cc4380692790150cc090114553e38a0e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;On March 14, 2022, it reported about &amp;ldquo;Google Sheets doubles cell limit&amp;rdquo;. &lt;a href=&#34;https://workspaceupdates.googleblog.com/2022/03/ten-million-cells-google-sheets.html&#34;&gt;Ref&lt;/a&gt; By this update, now, the users can use 10,000,000 cells in a Google Spreadsheet. This is great news for us. When I tried to handle 10,000,000 cells in a Google Spreadsheet using Google Apps Script, it was found that there were various important points. In this report, I would like to introduce the important points for handling 10,000,000 cells in Google Spreadsheet using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing Multiple Paragraphs on Google Document with a Regex using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/24/replacing-multiple-paragraphs-on-google-document-with-a-regex-using-google-apps-script/</link>
      <pubDate>Sun, 24 Apr 2022 10:17:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/24/replacing-multiple-paragraphs-on-google-document-with-a-regex-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f32f878c6cc005bbbdec2d9c635fae7b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for replacing the multiple paragraphs on Google Document with a regex using Google Apps Script. There is the method of &lt;code&gt;replaceText(searchPattern, replacement)&lt;/code&gt; for replacing the text on Google Document. &lt;a href=&#34;https://developers.google.com/apps-script/reference/document/body#replaceText(String,String)&#34;&gt;Ref&lt;/a&gt; For example, when a text of &lt;code&gt;sample1&lt;/code&gt; is replaced with &lt;code&gt;sample2&lt;/code&gt;, this can be achieved by a script like &lt;code&gt;DocumentApp.getActiveDocument().getBody().replaceText(&amp;quot;sample1&amp;quot;, &amp;quot;sample2&amp;quot;)&lt;/code&gt;. But, when the texts for replacing are the multiple paragraphs, this script cannot be used. Namely, it is considered that in the current stage, &lt;code&gt;replaceText&lt;/code&gt; cannot be used for replacing the multiple paragraphs. In this post, I would like to introduce a sample script for replacing the texts with the multiple paragraphs using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simply Converting HTML to Plain Text using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/22/simply-converting-html-to-plain-text-using-google-apps-script/</link>
      <pubDate>Fri, 22 Apr 2022 10:21:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/22/simply-converting-html-to-plain-text-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2779ee59a199011e3f48a1fa92879a68&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for simply converting HTML to plain text using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-values&#34;&gt;Sample values&lt;/h2&gt;&#xA;&lt;h3 id=&#34;html-input-value&#34;&gt;HTML (input value)&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample1&amp;#34;&lt;/span&gt;&amp;gt;sample text1&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample2&amp;#34;&lt;/span&gt;&amp;gt;sample text2&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;ul&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample3&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;&amp;gt;sample list 1&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;&amp;gt;sample list 2&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;ul&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;table&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample4&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;tbody&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;tr&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;a1&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;b1&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;c1&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;tr&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;tr&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;a2&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;b2&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;c2&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;tr&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;tbody&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;table&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;text-output-value&#34;&gt;Text (output value)&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sample text1&#xD;&#xA;sample text2&#xD;&#xA;&#xD;&#xA;   - sample list 1&#xD;&#xA;   - sample list 2&#xD;&#xA;&#xD;&#xA;a1 b1 c1&#xD;&#xA;a2 b2 c2&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sampleHTML&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`&amp;lt;div id=&amp;#34;sample1&amp;#34;&amp;gt;sample text1&amp;lt;/div&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;div id=&amp;#34;sample2&amp;#34;&amp;gt;sample text2&amp;lt;/div&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;ul id=&amp;#34;sample3&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;lt;li&amp;gt;sample list 1&amp;lt;/li&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;lt;li&amp;gt;sample list 2&amp;lt;/li&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/ul&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;table id=&amp;#34;sample4&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;lt;tbody&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;tr&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;td&amp;gt;a1&amp;lt;/td&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;td&amp;gt;b1&amp;lt;/td&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;td&amp;gt;c1&amp;lt;/td&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;/tr&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;tr&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;td&amp;gt;a2&amp;lt;/td&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;td&amp;gt;b2&amp;lt;/td&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;td&amp;gt;c2&amp;lt;/td&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;/tr&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;lt;/tbody&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/table&amp;gt;`&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GmailApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createDraft&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, { &lt;span style=&#34;color:#a6e22e&#34;&gt;htmlBody&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sampleHTML&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;plainText&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getMessage&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getPlainBody&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;deleteDraft&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;plainText&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;This method uses &lt;code&gt;GmailApp.createDraft&lt;/code&gt; for converting HTML to plain text. When a draft email is created with &lt;code&gt;GmailApp.createDraft&lt;/code&gt; by giving an HTML body, when the message content is retrieved with &lt;code&gt;getPlainBody()&lt;/code&gt;, the plain text is retrieved. This method uses this situation.&lt;/li&gt;&#xA;&lt;li&gt;When this sample script is run, the result in &amp;ldquo;Sample values&amp;rdquo; section can be obtained.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This method is a simple conversion from HTML to plain text. So I&amp;rsquo;m not sure whether this method can be used for all HTML data. Please be careful about this.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/apps-script/reference/gmail/gmail-app#createDraft(String,String,String,Object)&#34;&gt;createDraft(recipient, subject, body, options)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/apps-script/reference/gmail/gmail-message#getplainbody&#34;&gt;getPlainBody()&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Merging Rows with Same Header Title in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/20/merging-rows-with-same-header-title-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 20 Apr 2022 10:30:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/20/merging-rows-with-same-header-title-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/89e8825f31f65621332634dcbe9cf503&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample Google Apps Script for processing the values in Google Spreadsheet. In this sample situation, each row is merged using the same header title.&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, the sample input and output situations are as follows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-situation&#34;&gt;Sample situation&lt;/h2&gt;&#xA;&lt;h3 id=&#34;input&#34;&gt;Input:&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220420a/fig1.png&#34;&#xA;     alt=&#34;Merging Rows with Same Header Title in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;output&#34;&gt;Output:&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220420a/fig2.png&#34;&#xA;     alt=&#34;Merging Rows with Same Header Title in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updating Script Editor of Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/14/updating-script-editor-of-google-apps-script/</link>
      <pubDate>Thu, 14 Apr 2022 09:38:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/14/updating-script-editor-of-google-apps-script/</guid>
      <description>&lt;p&gt;On April 13, 2022, &amp;ldquo;&lt;a href=&#34;https://workspaceupdates.googleblog.com/2022/04/apps-script-integrated-development-enviornment-improvements.html&#34;&gt;Additional functionality for the Apps Script Integrated Development Environment (IDE) Script Editor&lt;/a&gt;&amp;rdquo; has been reported.&lt;/p&gt;&#xA;&lt;p&gt;They say as follows.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We’re now adding several new features to the IDE to help achieve functional parity with the legacy IDE experience. These features are:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Script Properties&lt;/li&gt;&#xA;&lt;li&gt;Add-on Testing&lt;/li&gt;&#xA;&lt;li&gt;Time Zone Setting&lt;/li&gt;&#xA;&lt;li&gt;Rhino Debugging&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By this update, I believe that the script editor will be more useful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Quizzes in Google Form using Google Forms Service with Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/05/creating-quizzes-in-google-form-using-google-forms-service-with-google-apps-script/</link>
      <pubDate>Tue, 05 Apr 2022 09:25:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/05/creating-quizzes-in-google-form-using-google-forms-service-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3e131b55c7947ced19a3dd99410367eb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220405a/fig2.png&#34;&#xA;     alt=&#34;Creating Quizzes in Google Form using Google Forms Service with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating quizzes in Google Form using Google Forms Service with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-prepare-questions-and-answers&#34;&gt;1. Prepare questions and answers.&lt;/h3&gt;&#xA;&lt;p&gt;In this sample, the questions and answers are prepared using Spreadsheet as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220405a/fig1.png&#34;&#xA;     alt=&#34;Creating Quizzes in Google Form using Google Forms Service with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-sample-script&#34;&gt;2. Sample script.&lt;/h3&gt;&#xA;&lt;p&gt;This script is container-bound script of the above Spreadsheet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Quizzes in Google Form using Google Forms API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/04/creating-quizzes-in-google-form-using-google-forms-api-with-google-apps-script/</link>
      <pubDate>Mon, 04 Apr 2022 17:48:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/04/creating-quizzes-in-google-form-using-google-forms-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/eebcb2d71eed1aab5decff64287bcc9a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220404a/fig2.png&#34;&#xA;     alt=&#34;Creating Quizzes in Google Form using Google Forms API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating quizzes in Google Form using Google Forms API with Google Apps Script. Recently, Google Forms API has been officially published, and it got to be able to be used by users. By this, quizzes in Google Form can be created using Google Forms API.&lt;/p&gt;&#xA;&lt;p&gt;Here, there is one thing that can be achieved by Google Forms API. When Google Forms API is used, each choice in each question can be shuffled. This cannot be achieved with Google Forms Service (FormApp).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Summary of Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/01/retrieving-summary-of-google-document-using-google-apps-script/</link>
      <pubDate>Fri, 01 Apr 2022 10:42:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/01/retrieving-summary-of-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b61ec85a5f0fb4f5a9157fb9f7bd0e84&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220401b/fig1.png&#34;&#xA;     alt=&#34;Retrieving Summary of Google Document using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the summary of Google Document using Google Apps Script. Recently, a blog of &lt;a href=&#34;https://ai.googleblog.com/2022/03/auto-generated-summaries-in-google-docs.html&#34;&gt;Auto-generated Summaries in Google Docs&lt;/a&gt; has been posted. I thought that this is very interesting function. I thought that when this function is released, checking each summary of a lot of Google Document will be much useful for simply confirming the document content. And also, I thought that when all summaries can be retrieved using a script, it will be also useful. In this post, I would like to introduce to retrieve the summary of Google Document using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Merging Columns with Same Header Title in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/04/01/merging-columns-with-same-header-title-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 01 Apr 2022 10:28:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/04/01/merging-columns-with-same-header-title-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/41e62d17ca48a5b2f3f57e5e06ea8da0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample Google Apps Script for processing the values in Google Spreadsheet. In this sample situation, each column are merged using the same header title.&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, the sample input and output situations are as follows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-situation&#34;&gt;Sample situation&lt;/h2&gt;&#xA;&lt;h3 id=&#34;input-sheet1&#34;&gt;Input: &amp;ldquo;Sheet1&amp;rdquo;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220401a/fig1.png&#34;&#xA;     alt=&#34;Merging Columns with Same Header Title in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;output-sheet2&#34;&gt;Output: &amp;ldquo;Sheet2&amp;rdquo;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220401a/fig2.png&#34;&#xA;     alt=&#34;Merging Columns with Same Header Title in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Applicating Spread Syntax and Destructuring assignment to Google Spreadsheet with Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/03/30/applicating-spread-syntax-and-destructuring-assignment-to-google-spreadsheet-with-google-apps-script/</link>
      <pubDate>Wed, 30 Mar 2022 16:59:40 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/03/30/applicating-spread-syntax-and-destructuring-assignment-to-google-spreadsheet-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d0c60aa54fb55fc61a06593e311fa623&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In this report, I would like to introduce to apply the spread syntax and the destructuring assignment to Google Spreadsheet with Google Apps Script. The destructuring assignment can be used without V8 runtime. But, the spread syntax is required to be used with V8 runtime. Recently, I often saw the script using them at Stackoverflow. And also, I have sometimes gotten the questions related to the spread syntax and the destructuring assignment. So, I thought that I would like to introduce in my blog.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finally, Google Forms API has been officially released as version 1</title>
      <link>https://tanaikech.github.io/2022/03/17/finally-google-forms-api-has-been-officially-released-as-version-1/</link>
      <pubDate>Thu, 17 Mar 2022 10:59:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/03/17/finally-google-forms-api-has-been-officially-released-as-version-1/</guid>
      <description>&lt;p&gt;Finally, Google Forms API has been officially released as version 1.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://workspaceupdates.googleblog.com/2022/03/google-forms-api-generally-available.html&#34;&gt;Create surveys, quizzes, and more using the Google Forms API, now generally available&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Google Forms API provides programmatic access for managing Google Forms and acting on responses— empowering developers to build powerful integrations on top of Forms.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://developers.google.com/forms/api&#34;&gt;Forms API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bug of Create Method of Google Forms API was Removed</title>
      <link>https://tanaikech.github.io/2022/03/10/bug-of-create-method-of-google-forms-api-was-removed/</link>
      <pubDate>Thu, 10 Mar 2022 10:11:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/03/10/bug-of-create-method-of-google-forms-api-was-removed/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dbabd43df594d27cdd1ecc69a7badb52&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When I tested Google Forms API, I noticed that when a new Google Form is created by the method of forms.create, there is not title of the created Google Form. So, I have reported this to Google issue tracker. &lt;a href=&#34;https://issuetracker.google.com/issues/207158296&#34;&gt;Ref&lt;/a&gt; Today, I confirmed that this bug has been removed.&lt;/p&gt;&#xA;&lt;p&gt;And, when I saw the official document, I noticed that the following document has been added. &lt;a href=&#34;https://developers.google.com/forms/api/reference/rest/v1beta/forms/create&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220310a/fig1.png&#34;&#xA;     alt=&#34;Bug of Create Method of Google Forms API was Removed&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Go Library - getcode to v101</title>
      <link>https://tanaikech.github.io/2022/02/26/updated-go-library-getcode-to-v101/</link>
      <pubDate>Sat, 26 Feb 2022 15:40:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/26/updated-go-library-getcode-to-v101/</guid>
      <description>&lt;h2 id=&#34;getcode-was-updated-to-v101&#34;&gt;getcode was updated to v1.0.1&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (February 26, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Latest libraries are reflected to this library. And, the sample script is shown using the Quickstart for go of Drive API.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can get this from &lt;a href=&#34;https://github.com/tanaikech/getcode&#34;&gt;https://github.com/tanaikech/getcode&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v201</title>
      <link>https://tanaikech.github.io/2022/02/26/updated-goodls-to-v201/</link>
      <pubDate>Sat, 26 Feb 2022 11:39:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/26/updated-goodls-to-v201/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.1 (February 26, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A bug for the resumable download was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v200</title>
      <link>https://tanaikech.github.io/2022/02/25/updated-ggsrun-to-v200/</link>
      <pubDate>Fri, 25 Feb 2022 15:43:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/25/updated-ggsrun-to-v200/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.0 (February 25, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Modified using the latest libraries. The specification of ggsrun is not changed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v200</title>
      <link>https://tanaikech.github.io/2022/02/25/updated-goodls-to-v200/</link>
      <pubDate>Fri, 25 Feb 2022 15:04:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/25/updated-goodls-to-v200/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.0 (February 25, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;By changing the specification of methods, &lt;code&gt;drive.New()&lt;/code&gt; and &lt;code&gt;transport.APIKey&lt;/code&gt; were deprecated. By this, I updated &lt;a href=&#34;https://github.com/tanaikech/go-getfilelist&#34;&gt;go-getfilelist&lt;/a&gt;. In this version, I used this updated library to goodls. And also, &lt;code&gt;drive.NewService()&lt;/code&gt; is used instead of &lt;code&gt;drive.New()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Go Library - go-getfilelist to v200</title>
      <link>https://tanaikech.github.io/2022/02/25/updated-go-library-go-getfilelist-to-v200/</link>
      <pubDate>Fri, 25 Feb 2022 14:30:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/25/updated-go-library-go-getfilelist-to-v200/</guid>
      <description>&lt;h2 id=&#34;go-getfilelist-was-updated-to-v200&#34;&gt;go-getfilelist was updated to v2.0.0&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.0 (February 25, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;By changing the specification of methods, &lt;code&gt;drive.New()&lt;/code&gt; and &lt;code&gt;transport.APIKey&lt;/code&gt; were deprecated. By this, I updated the specification of this library as the version 2. When you are required to continue to use &lt;code&gt;drive.New()&lt;/code&gt; and &lt;code&gt;transport.APIKey&lt;/code&gt;, you can use them with the version 1. At version 1, &lt;code&gt;*http.Client&lt;/code&gt; is given to this library. From version 2, &lt;code&gt;*drive.Service&lt;/code&gt; is given instead of &lt;code&gt;*http.Client&lt;/code&gt;. Please be careful this. You can see the sample script at the above.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can get this from &lt;a href=&#34;https://github.com/tanaikech/go-getfilelist&#34;&gt;https://github.com/tanaikech/go-getfilelist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: CLI Tool - goris to v300</title>
      <link>https://tanaikech.github.io/2022/02/23/updated-cli-tool-goris-to-v300/</link>
      <pubDate>Wed, 23 Feb 2022 14:31:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/23/updated-cli-tool-goris-to-v300/</guid>
      <description>&lt;p&gt;goris is a CLI tool to search for images with Google Reverse Image Search.&lt;/p&gt;&#xA;&lt;p&gt;Today, it was updated to v3.0.0. Please check it out. &lt;a href=&#34;https://github.com/tanaikech/goris&#34;&gt;https://github.com/tanaikech/goris&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v3.0.0 (February 23, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The specification for running the reverse image search was changed at Google side. By this, this application was also changed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v128</title>
      <link>https://tanaikech.github.io/2022/02/17/updated-goodls-to-v128/</link>
      <pubDate>Thu, 17 Feb 2022 15:38:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/17/updated-goodls-to-v128/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.8 (February 17, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Recently, it seems that the specification the process for downloading the shared file on Google Drive has been changed. So I updated goodls for reflecting this. The usage of goodls is not changed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Counter in Cell of Google Spreadsheet using Infinite Loop with Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/02/15/counter-in-cell-of-google-spreadsheet-using-infinite-loop-with-google-apps-script/</link>
      <pubDate>Tue, 15 Feb 2022 09:18:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/15/counter-in-cell-of-google-spreadsheet-using-infinite-loop-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/efffc9233aba43922aae6cc93329075d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220215a/fig1.gif&#34;&#xA;     alt=&#34;Counter in Cell of Google Spreadsheet using Infinite Loop with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script of a counter in a cell of Google Spreadsheet using the infinite loop with Google Apps Script. Recently, I have reported about the infinite loop on Google Spreadsheet. &lt;a href=&#34;https://tanaikech.github.io/2022/02/14/report-occurring-and-resolving-infinite-loop-on-google-spreadsheet-using-google-apps-script/&#34;&gt;Ref&lt;/a&gt; This sample script achieves a counter in a cell using the infinite loop.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;This sample script is a test script for counting the number using the infinite loop. Please be careful this. Please copy and paste the following script to the script editor of Google Spreadsheet and save it. And, please install OnChange trigger to the function &lt;code&gt;onChange()&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Occurring and Resolving Infinite Loop on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/02/14/report-occurring-and-resolving-infinite-loop-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 14 Feb 2022 09:58:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/14/report-occurring-and-resolving-infinite-loop-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c385bed8f037d67b154d9c0c8ff7a341&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220214a/fig1.gif&#34;&#xA;     alt=&#34;Report: Occurring and Resolving Infinite Loop on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Here, I would like to introduce a report for occurring and resolving the infinite loop on Google Spreadsheet using Google Apps Script. I have reported this to Google issue tracker. &lt;a href=&#34;https://issuetracker.google.com/issues/160797706&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-occurring-infinite-loop&#34;&gt;Sample script: Occurring infinite loop&lt;/h2&gt;&#xA;&lt;p&gt;This sample script is a test script for confirming the infinite loop. Please be careful this. Please copy and paste the following script to the script editor of Google Spreadsheet and save it. And, please install OnChange trigger to the function &lt;code&gt;onChange()&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Inserting Multiple Paragraphs to Google Document in Order using Google Docs API</title>
      <link>https://tanaikech.github.io/2022/02/12/report-inserting-multiple-paragraphs-to-google-document-in-order-using-google-docs-api/</link>
      <pubDate>Sat, 12 Feb 2022 20:56:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/12/report-inserting-multiple-paragraphs-to-google-document-in-order-using-google-docs-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6aa646691f6c2224202fa6fb756e3862&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a report for inserting the multiple paragraphs to Google Document in order using Google Docs API.&lt;/p&gt;&#xA;&lt;p&gt;When the multiple paragraphs are inserted to Google Document using Google Docs API, it is required to pay attention to the index for inserting the texts. In this report, I would like to introduce the points for achieving this with a simple method.&lt;/p&gt;&#xA;&lt;p&gt;Although this report uses Google Apps Script, the logic of this method can be used for other language.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RichTextApp</title>
      <link>https://tanaikech.github.io/2022/02/08/updated-gas-library-richtextapp/</link>
      <pubDate>Tue, 08 Feb 2022 14:48:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/08/updated-gas-library-richtextapp/</guid>
      <description>&lt;h2 id=&#34;richtextapp-was-updated-to-v131&#34;&gt;RichTextApp was updated to v1.3.1&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.3.1 (February 8, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Modified the method of &lt;a href=&#34;https://github.com/tanaikech/RichTextApp#documenttospreadsheet&#34;&gt;&lt;code&gt;DocumentToSpreadsheet&lt;/code&gt;&lt;/a&gt;. Before this update, the paragraphs with only line breaks have been ignored. From this version, such paragraphs are included in the result value of the cell.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RichTextApp&#34;&gt;https://github.com/tanaikech/RichTextApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Google Apps Script Library Database</title>
      <link>https://tanaikech.github.io/2022/02/01/updated-google-apps-script-library-database/</link>
      <pubDate>Tue, 01 Feb 2022 16:54:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/01/updated-google-apps-script-library-database/</guid>
      <description>&lt;p&gt;Today, I noticed that the sheet ID of Spreadsheet, which is one of database, had been changed. So I used the sheet name of &amp;ldquo;Libraries&amp;rdquo; instead of the sheet ID. By this, the Google Apps Script library can be retrieved from 2 databases.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/tanaikech/Google-Apps-Script-Library-Database&#34;&gt;Google Apps Script Library Database&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - HtmlFormApp</title>
      <link>https://tanaikech.github.io/2022/02/01/gas-library-htmlformapp/</link>
      <pubDate>Tue, 01 Feb 2022 13:35:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/02/01/gas-library-htmlformapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/HtmlFormApp/raw/master/images/fig1.png&#34;&#xA;     alt=&#34;GAS Library - HtmlFormApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a Google Apps Script library for parsing the form object from HTML form and appending the submitted values to the Spreadsheet.&lt;/p&gt;&#xA;&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;&#xA;&lt;p&gt;There is Google Form in the Google service. Google Form can parse the submitted data and put it in the Spreadsheet. But when we want to use the custom form, it is required to use the HTML form on Web Apps, dialog, and sidebar. In this case, it is required to prepare Javascript and Google Apps Script for parsing the form object from the HTML form and appending the parsed values to Spreadsheet. Recently, a bug of the built-in parser from the Javascript side to the Google Apps Script side for parsing the form object from the HTML form had been removed. &lt;a href=&#34;https://tanaikech.github.io/2021/12/09/fixed-google-apps-script-web-app-html-form-file-input-fields-not-in-blob-compatible-format/&#34;&gt;Ref&lt;/a&gt; But, in the current stage, this bug is removed for only Web Apps. Unfortunately, for the dialog and sidebar, this bug has never been removed. And also, unfortunately, the built-in parser from the Javascript side to the Google Apps Script side cannot be used for the multiple files of the input tag. And, this cannot be used except for &lt;code&gt;google.script.run&lt;/code&gt;. For example, when the HTML form including the files is submitted using &amp;ldquo;action&amp;rdquo; of the form tag, the file content is not included. And then, when the form object is retrieved, it is required to parse the object and put it in the Spreadsheet. From these situations, I thought that when this process can be run using the libraries, that might be useful for users. So I created this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On January 19, 2022, 2 Classes of &#39;CellImageBuilder&#39; and &#39;CellImage&#39; have been added to Spreadsheet Service</title>
      <link>https://tanaikech.github.io/2022/01/22/on-january-19-2022-2-classes-of-cellimagebuilder-and-cellimage-have-been-added-to-spreadsheet-service/</link>
      <pubDate>Sat, 22 Jan 2022 10:57:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/01/22/on-january-19-2022-2-classes-of-cellimagebuilder-and-cellimage-have-been-added-to-spreadsheet-service/</guid>
      <description>&lt;p&gt;On January 19, 2022, 2 classes of &lt;code&gt;CellImageBuilder&lt;/code&gt; and &lt;code&gt;CellImage&lt;/code&gt; have been added to the Spreadsheet Service.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CellImageBuilder: &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/cell-image-builder&#34;&gt;https://developers.google.com/apps-script/reference/spreadsheet/cell-image-builder&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;CellImage: &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/cell-image&#34;&gt;https://developers.google.com/apps-script/reference/spreadsheet/cell-image&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, it seems that the image manually put to a cell without using the URL cannot still be retrieved.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When an image is manually put from URL and Google Drive to a cell, this image cannot be retrieved.&lt;/li&gt;&#xA;&lt;li&gt;When an image is put using &lt;code&gt;setSourceUrl&lt;/code&gt; method with a script, this image and URL cannot be retrieved.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I would like to expect to resolve these in the future update.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround for Inserting Non-public image of Google Drive using IMAGE Function in a Cell on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/01/13/workaround-for-inserting-non-public-image-of-google-drive-using-image-function-in-a-cell-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Thu, 13 Jan 2022 11:52:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/01/13/workaround-for-inserting-non-public-image-of-google-drive-using-image-function-in-a-cell-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/80c1cd268c303edcbd5483211a1b9ea4&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220113a/fig1.png&#34;&#xA;     alt=&#34;Workaround for Inserting Non-public image of Google Drive using IMAGE Function in a Cell on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a workaround for inserting the non-public image of Google Drive using IMAGE function in a cell on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When an image on Google Drive is inserted to a cell of Spreadsheet using &lt;code&gt;=IMAGE(URL)&lt;/code&gt; function, the image of URL is required to be publicly shared. But, there is the case that the image cannot be publicly shared. This workaround might be able to be used for this situation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Update: Javascript library - HtmlFormObjectParserForGoogleAppsScript_js</title>
      <link>https://tanaikech.github.io/2022/01/11/update-javascript-library-htmlformobjectparserforgoogleappsscript_js/</link>
      <pubDate>Tue, 11 Jan 2022 17:00:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/01/11/update-javascript-library-htmlformobjectparserforgoogleappsscript_js/</guid>
      <description>&lt;p&gt;This is a Javascript library for sending the HTML form object to Google Apps Script using google.script.run.&lt;/p&gt;&#xA;&lt;p&gt;HtmlFormObjectParserForGoogleAppsScript_js was updated to v1.0.1.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (January 11, 2022)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A new argument of &lt;code&gt;includeOrder&lt;/code&gt; was added as the 4th argument. This library returns the parsed form object as a JSON object. By this, the order of HTML form object is not saved. From this version, this order can be included. This argument includes the order of each input tag in form. The default value is &lt;code&gt;false&lt;/code&gt;. When this value is &lt;code&gt;true&lt;/code&gt;, a property of &lt;code&gt;orderOfFormObject&lt;/code&gt; is included in the returned object. This value is the order of HTML form object. Using this value, you can retrieve the parsed form object in order of HTML form.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail of this at &lt;a href=&#34;https://github.com/tanaikech/HtmlFormObjectParserForGoogleAppsScript_js&#34;&gt;https://github.com/tanaikech/HtmlFormObjectParserForGoogleAppsScript_js&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Importing CSV Data by Keeping Number Formats of Cells on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/01/07/importing-csv-data-by-keeping-number-formats-of-cells-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 07 Jan 2022 16:00:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/01/07/importing-csv-data-by-keeping-number-formats-of-cells-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/909863d8807c9143f4814aa270afe02e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for importing a CSV data by keeping the number formats of cells on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When a CSV data is manually put using the default UI using the browser, it seems that the number formats of all cells cannot be kept. In order to import the CSV data to the cells with keeping the number formats, it is required to use a script as a workaround. In this workaround, Google Apps Script is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trend of google-apps-script Tag on Stackoverflow 2022</title>
      <link>https://tanaikech.github.io/2022/01/07/trend-of-google-apps-script-tag-on-stackoverflow-2022/</link>
      <pubDate>Fri, 07 Jan 2022 15:31:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/01/07/trend-of-google-apps-script-tag-on-stackoverflow-2022/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e258f30182fdd6609d94d87805914caa&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;center&gt;&#xD;&#xA;Published: January 7, 2022&#xD;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At Stackoverflow, a lot of people post the questions and answers to the questions every day. There are various tags in Stackoverflow. A lot of discussions are performed at each tag. Their discussions bring important information and are much useful for a lot of people. As one of the tags, there is &amp;ldquo;google-apps-script&amp;rdquo;. I sometimes discuss the questions with that tag. When we see the discussions, we can notice that the discussions are changed and progressed by the time, because &amp;ldquo;Google Apps Script&amp;rdquo; which is the origin of the tag is updated. This report thinks this change is the trend of the tag of &amp;ldquo;google-apps-script&amp;rdquo;. This trend includes the number of questions, questioners, answerers, and tags adding to the tag of &amp;ldquo;google-apps-script&amp;rdquo;. The trend of the tag of &amp;ldquo;google-apps-script&amp;rdquo; is deeply related to the progression of Google Apps Script and the various applications for Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Detecting Operations to Google Spreadsheet by Owner, Specific Users, and Anonymous Users using Google Apps Script</title>
      <link>https://tanaikech.github.io/2022/01/04/detecting-operations-to-google-spreadsheet-by-owner-specific-users-and-anonymous-users-using-google-apps-script/</link>
      <pubDate>Tue, 04 Jan 2022 12:34:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2022/01/04/detecting-operations-to-google-spreadsheet-by-owner-specific-users-and-anonymous-users-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4c0067b5faec34e4c8a4b8d24a9350e5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220104a/fig1.gif&#34;&#xA;     alt=&#34;Detecting Operations to Google Spreadsheet by Owner, Specific Users, and Anonymous Users using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a report for detecting the operations to Google Spreadsheet by the owner, the specific users, and the anonymous users using Google Apps Script. When the Spreadsheet is shared with the specific users and/or the anonymous users, when these users can be identified, it will be useful. In this report, I would like to introduce the method for identifying the users who are the owner, the specific users, and the anonymous users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Method for using ggsrun</title>
      <link>https://tanaikech.github.io/2021/12/28/simple-method-for-using-ggsrun/</link>
      <pubDate>Tue, 28 Dec 2021 11:12:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/28/simple-method-for-using-ggsrun/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/695f7016b04e4c4156ad928e9482ead9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a simple method for using &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;ggsrun&lt;/a&gt;. ggsrun is a CLI tool to execute Google Apps Script (GAS) on a terminal. Also this CLI tool can be used for managing files in Google Drive for OAuth2 and Service Account.&lt;/p&gt;&#xA;&lt;p&gt;When you use ggsrun, it is required to retrieve the client ID and client secret and/or the service account at Cloud Platform Project. But, there is the case that you want to simply test or you want to just upload and download the files for Google Drive. In this post, I would like to introduce how to simply use ggsrun.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inverting Selected Objects on Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/12/26/inverting-selected-objects-on-google-slides-using-google-apps-script/</link>
      <pubDate>Sun, 26 Dec 2021 17:01:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/26/inverting-selected-objects-on-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8eb87e6499631a79dade7d4f83e372f7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211226a/fig1.gif&#34;&#xA;     alt=&#34;Inverting Selected Objects on Google Slides using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for inverting the selected objects on Google Slides using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;I have the case that I want to invert the selected objects on Google Slides. This sample script can be achieved this goal using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Google Slides, and save the script. And, please select the objects on the Slide and run the function &lt;code&gt;main()&lt;/code&gt;. By this, the selected objects are inverted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inverting Selected Ranges on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/12/24/inverting-selected-ranges-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 24 Dec 2021 16:47:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/24/inverting-selected-ranges-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c08b9ea7a0f54b3e6074bba510e1efb4&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211224a/fig1.gif&#34;&#xA;     alt=&#34;Inverting Selected Ranges on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for inverting the selected ranges on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;I have the case that I want to invert the selected ranges on Google Spreadsheet. This sample script can be achieved this goal using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Google Spreadsheet, and save the script. And, please select the cells and run the function &lt;code&gt;main()&lt;/code&gt;. By this, the selected ranges are inverted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Checking whether Cells on Google Spreadsheet have Checkboxes using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/12/23/checking-whether-cells-on-google-spreadsheet-have-checkboxes-using-google-apps-script/</link>
      <pubDate>Thu, 23 Dec 2021 14:46:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/23/checking-whether-cells-on-google-spreadsheet-have-checkboxes-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/763ac2328d60805a3f971537e8b6e7c3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for checking whether the cells on Google Spreadsheet have checkboxes using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When the checkboxes are used in Google Spreadsheet, there is the case that it is required to know whether the cells have the checkboxes. This sample script can be used for such the situation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-1&#34;&gt;Sample script 1&lt;/h2&gt;&#xA;&lt;p&gt;This sample script can check whether all cells in &amp;ldquo;A1:B10&amp;rdquo; have the checkboxes. When all cells in &amp;ldquo;A1:B10&amp;rdquo; have the checkboxes, &lt;code&gt;res&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting from String to Hex, from Hex to Bytes, from Bytes to String using Google Apps script</title>
      <link>https://tanaikech.github.io/2021/12/18/converting-from-string-to-hex-from-hex-to-bytes-from-bytes-to-string-using-google-apps-script/</link>
      <pubDate>Sat, 18 Dec 2021 15:31:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/18/converting-from-string-to-hex-from-hex-to-bytes-from-bytes-to-string-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/707b2cd2705f665a11b1ceb2febae91e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211218a/fig1.png&#34;&#xA;     alt=&#34;Converting from String to Hex, from Hex to Bytes, from Bytes to String using Google Apps script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting from the string value to the hex value, from the hex value to the byte array, from the byte array to the string value using Google Apps script.&lt;/p&gt;&#xA;&lt;p&gt;When the creation of a signature for requesting and the encryption of data are used, there is the case that these conversions are required to be used. So I would like to introduce these scripts as sample scripts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitHub: Google Forms API Apps Script Web app</title>
      <link>https://tanaikech.github.io/2021/12/17/github-google-forms-api-apps-script-web-app/</link>
      <pubDate>Fri, 17 Dec 2021 17:20:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/17/github-google-forms-api-apps-script-web-app/</guid>
      <description>&lt;p&gt;The sample scripts for using Google Forms API have been published by &lt;a href=&#34;https://github.com/cschalk-goog&#34;&gt;cschalk-goog&lt;/a&gt;. The scripts include the method for basically requesting to Forms API. This information will be very useful for a lot of users.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/googleworkspace/apps-script-samples/tree/master/forms-api/demos/AppsScriptFormsAPIWebApp&#34;&gt;https://github.com/googleworkspace/apps-script-samples/tree/master/forms-api/demos/AppsScriptFormsAPIWebApp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20220105a/fig1.png&#34;&#xA;     alt=&#34;GitHub: Google Forms API Apps Script Web app&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pseudo OnEdit Trigger for Google Spreadsheet without Simple and Installable Triggers using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/12/16/pseudo-onedit-trigger-for-google-spreadsheet-without-simple-and-installable-triggers-using-google-apps-script/</link>
      <pubDate>Thu, 16 Dec 2021 17:46:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/16/pseudo-onedit-trigger-for-google-spreadsheet-without-simple-and-installable-triggers-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/05d9922a947232dbda5143b6ac6dc71f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211216a/fig1.gif&#34;&#xA;     alt=&#34;Pseudo OnEdit Trigger for Google Spreadsheet without Simple and Installable Triggers using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for achieving the pseudo OnEdit trigger for Google Spreadsheet without the simple and the installable triggers using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Today, I saw &lt;a href=&#34;https://stackoverflow.com/q/70367955/7108653&#34;&gt;a question&lt;/a&gt; at Stackoverflow. The goal of this question is as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There is a Google Spreadsheet created by a service account.&lt;/li&gt;&#xA;&lt;li&gt;Goal is to use OnEdit trigger on this Spreadsheet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I thought a workaround for achieving this goal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Google Forms API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/12/11/using-google-forms-api-with-google-apps-script/</link>
      <pubDate>Sat, 11 Dec 2021 15:13:40 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/11/using-google-forms-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bac38226e863a398f55b5c3d817d86ed&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211211a/fig1.png&#34;&#xA;     alt=&#34;Using Google Forms API with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;On October 12, 2021, Google Forms API had been announced. &lt;a href=&#34;https://developers.googleblog.com/2021/10/announcing-google-forms-api_01768004272.html&#34;&gt;Ref&lt;/a&gt; On December 7, 2021, Google Forms API had been released as open beta. &lt;a href=&#34;https://workspaceupdates.googleblog.com/2021/12/google-forms-api-now-available-in-open.html&#34;&gt;Ref&lt;/a&gt; In the current stage, when the users join the Early Adopter Program, they can use Google Forms API of the beta version. &lt;a href=&#34;https://docs.google.com/forms/d/e/1FAIpQLSdSol7REBlfqk3J9i8TD__B6f7185ynkVw7HkJQ3Rg62W36sw/viewform&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By using Google Forms API, what &lt;a href=&#34;https://developers.google.com/apps-script/reference/forms&#34;&gt;Google Forms service&lt;/a&gt; cannot achieve got to be able to be achieved by Google Forms API. In this report, I would like to introduce how to use Google Forms API and the sample script of the situations which cannot be achieved by Google Forms service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Forms API now available in open beta</title>
      <link>https://tanaikech.github.io/2021/12/09/google-forms-api-now-available-in-open-beta/</link>
      <pubDate>Thu, 09 Dec 2021 18:03:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/09/google-forms-api-now-available-in-open-beta/</guid>
      <description>&lt;p&gt;Now, Google Forms API can be used in open beta. The official post is &lt;a href=&#34;https://workspaceupdates.googleblog.com/2021/12/google-forms-api-now-available-in-open.html&#34;&gt;https://workspaceupdates.googleblog.com/2021/12/google-forms-api-now-available-in-open.html&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://developers.google.com/forms/api&#34;&gt;Official document of Forms API&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Fixed] Google Apps Script Web App HTML form file-input fields not in blob compatible format</title>
      <link>https://tanaikech.github.io/2021/12/09/fixed-google-apps-script-web-app-html-form-file-input-fields-not-in-blob-compatible-format/</link>
      <pubDate>Thu, 09 Dec 2021 18:00:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/09/fixed-google-apps-script-web-app-html-form-file-input-fields-not-in-blob-compatible-format/</guid>
      <description>&lt;p&gt;After V8 runtime was released, there was a bug that when the file is sent from HTML form to Google Apps Script side using google.script.run, the file blob was the invalid data.&lt;/p&gt;&#xA;&lt;p&gt;From &lt;a href=&#34;https://pulse.appsscript.info/p/2021/12/fixed-google-apps-script-web-app-html-form-file-input-fields-not-in-blob-compatible-format/&#34;&gt;Apps Script Pulse by Martin Hawksey&lt;/a&gt;, it was found that the invalid blob of sending the file of HTML form to Google Apps Script side using google.script.run has finally been resolved. In this case, this script can be used with V8 runtime.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Data from Content-Type of &#39;text/event-stream&#39; using Javascript and Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/12/07/retrieving-data-from-content-type-of-text/event-stream-using-javascript-and-google-apps-script/</link>
      <pubDate>Tue, 07 Dec 2021 11:09:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/07/retrieving-data-from-content-type-of-text/event-stream-using-javascript-and-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2ba5f847ae6032d1611875d60cdf79b2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the data from Content-Type of &amp;rsquo;text/event-stream&amp;rsquo; using Javascript and Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, UrlFetchApp of Google Apps Script cannot be retrieved the data from Content-Type of &amp;rsquo;text/event-stream&amp;rsquo;. This sample script can be used for achieving this as a workaround.&lt;/p&gt;&#xA;&lt;p&gt;This sample script uses &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/EventSource&#34;&gt;EventSource&lt;/a&gt;. So this script uses a dialog on Google Docs files (This sample uses Google Spreadsheet.).&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-prepare-spreadsheet&#34;&gt;1. Prepare Spreadsheet.&lt;/h3&gt;&#xA;&lt;p&gt;Create new Google Spreadsheet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pseudo OnEdit Trigger for Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/12/01/pseudo-onedit-trigger-for-google-document-using-google-apps-script/</link>
      <pubDate>Wed, 01 Dec 2021 09:56:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/12/01/pseudo-onedit-trigger-for-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f27d427f07b20ca9fedec21e643c4a3e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211201a/fig1.gif&#34;&#xA;     alt=&#34;Pseudo OnEdit Trigger for Google Document using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for achieving the pseudo OnEdit trigger for Google Document using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, there is not OnEdit trigger for Google Document. &lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers#available_types_of_triggers&#34;&gt;Ref&lt;/a&gt; But I sometimes have the case that I want to use OnEdit trigger. So, as the current workaround, I created this sample script. I think that this workaround can be also used for Google Slides, Google Form and also Google Spreadsheet. In the case of Spreadsheet, what the existing OnEdit trigger and the time-driven trigger cannot do can be achieved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Range ID to Range Object on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/11/26/converting-range-id-to-range-object-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 26 Nov 2021 11:48:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/11/26/converting-range-id-to-range-object-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3aa69f1a8e2a944c7df926879fa0f34e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a workaround for converting the range ID to the range object on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When the named range is put to a cell as the hyperlink as follows,&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211126a/fig1.png&#34;&#xA;     alt=&#34;Converting Range ID to Range Object on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;the hyperlink is like &lt;code&gt;#rangeid=123456789&lt;/code&gt;. When this link is clicked, it moves to the cells of the named range. So it is considered that this value of &lt;code&gt;#rangeid=123456789&lt;/code&gt; includes the information about the range of the named range. But, unfortunately, in the current stage, there is no methods for directly retrieving the range object from the range ID. In this sample sample script, as a workaround, the range ID is converted to the range object using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exporting All Thumbnail Images Retrieved from Google Slides as Zip File using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/11/24/exporting-all-thumbnail-images-retrieved-from-google-slides-as-zip-file-using-google-apps-script/</link>
      <pubDate>Wed, 24 Nov 2021 14:17:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/11/24/exporting-all-thumbnail-images-retrieved-from-google-slides-as-zip-file-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/66a83c01e1f99829a85f909f8facb834&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for exporting all thumbnail images retrieved from Google Slides as a zip file using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Before you use this script, please enable Slides API at Advanced Google services. &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enable_advanced_services&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;presentationId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set Google Slides ID.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the folder ID.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;outputFilename&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the output filename.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blobs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SlidesApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;openById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;presentationId&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getSlides&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;Slides&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Presentations&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pages&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getThumbnail&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;presentationId&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getObjectId&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;thumbnailProperties.mimeType&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PNG&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;thumbnailProperties.thumbnailSize&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LARGE&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ).&lt;span style=&#34;color:#a6e22e&#34;&gt;contentUrl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`page&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;000&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)).&lt;span style=&#34;color:#a6e22e&#34;&gt;slice&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.png`&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFolderById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folderId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blobs&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;outputFilename&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.zip&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Updated: Javascript library - ResumableUploadForGoogleDrive_js</title>
      <link>https://tanaikech.github.io/2021/11/15/updated-javascript-library-resumableuploadforgoogledrive_js/</link>
      <pubDate>Mon, 15 Nov 2021 15:38:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/11/15/updated-javascript-library-resumableuploadforgoogledrive_js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ResumableUploadForGoogleDrive_js&#34;&gt;ResumableUploadForGoogleDrive_js&lt;/a&gt; was updated to v2.0.0.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.0 (November 15, 2021)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;New Class ResumableUploadToGoogleDrive2 was added. By this, the large file which is over the memory in the local PC can be uploaded by the resumable upload.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Javascript library to achieve the resumable upload for Google Drive.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When a file more than 5 MB is uploaded to Google Drive with Drive API, &lt;a href=&#34;https://developers.google.com/drive/api/v3/manage-uploads#resumable&#34;&gt;the resumable upload&lt;/a&gt; is required to be used. I have already published the sample script for &amp;ldquo;Resumable Upload for Web Apps using Google Apps Script&amp;rdquo;. &lt;a href=&#34;https://github.com/tanaikech/Resumable_Upload_For_WebApps&#34;&gt;Ref&lt;/a&gt; In this case, Web Apps is used. Here, I would like to introduce the script for the resumable upload created by only Javascript. Unfortunately, in the current stage, at &lt;a href=&#34;https://github.com/google/google-api-javascript-client&#34;&gt;google-api-javascript-client&lt;/a&gt;, there are no methods for the resumable upload. And, I thought that when this function is created as a Javascript library, it might be useful for users. Also that library is also useful for me. So I created this. If this was useful for your situation, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Letting Users Running Google Apps Script on Google Spreadsheet without both Authorizing Scopes and Showing Script</title>
      <link>https://tanaikech.github.io/2021/11/15/letting-users-running-google-apps-script-on-google-spreadsheet-without-both-authorizing-scopes-and-showing-script/</link>
      <pubDate>Mon, 15 Nov 2021 09:36:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/11/15/letting-users-running-google-apps-script-on-google-spreadsheet-without-both-authorizing-scopes-and-showing-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/82089f55e9e647bbe965a563ab1ce657&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample workaround for letting users running Google Apps Script on Google Spreadsheet without both authorizing the scopes and showing the script.&lt;/p&gt;&#xA;&lt;p&gt;The flow of this workaround is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create Web Apps created by Google Apps Script and deploy it as Web Apps. As the returned value, the XML data is returned.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your script can be included in this script.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;User put a formula of &lt;code&gt;=IMPORTML(&amp;quot;WebApps URL&amp;quot;, &amp;quot;xpath&amp;quot;)&lt;/code&gt; to a cell.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;By this flow, you can achieve to let users running Google Apps Script on Google Spreadsheet without both authorizing the scopes and showing the script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Post was Featured at Google Workspace Developer Newsletter</title>
      <link>https://tanaikech.github.io/2021/11/09/my-post-was-featured-at-google-workspace-developer-newsletter/</link>
      <pubDate>Tue, 09 Nov 2021 17:41:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/11/09/my-post-was-featured-at-google-workspace-developer-newsletter/</guid>
      <description>&lt;p&gt;My post of &amp;ldquo;&lt;a href=&#34;https://tanaikech.github.io/2021/10/16/sending-multiple-emails-using-batch-request-with-gmail-api-using-google-apps-script/&#34;&gt;Sending Multiple Emails using Batch Request with Gmail API using Google Apps Script&lt;/a&gt;&amp;rdquo; was featured at &lt;a href=&#34;https://developers.google.com/workspace/newsletters#expandable-2&#34;&gt;Google Workspace Developer Newsletter on October 2021&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211109a/fig1.png&#34;&#xA;     alt=&#34;My Post was Featured at Google Workspace Developer Newsletter&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Movie File on Google Drive to YouTube using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/11/02/uploading-movie-file-on-google-drive-to-youtube-using-google-apps-script/</link>
      <pubDate>Tue, 02 Nov 2021 14:15:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/11/02/uploading-movie-file-on-google-drive-to-youtube-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dc62aeb9a363513d6d27baf119ecfc2d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211102b/fig1.png&#34;&#xA;     alt=&#34;Uploading Movie File on Google Drive to YouTube using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for uploading a movie file on Google Drive to YouTube using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Before you use these scripts, please enable YouTube API at Advanced Google services.&lt;/strong&gt; &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enable_advanced_services&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-1&#34;&gt;Sample script 1&lt;/h2&gt;&#xA;&lt;p&gt;This sample script uses YouTube API at Advanced Google services.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the file ID of movie file on the Google Drive.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;YouTube&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Videos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;insert&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    { &lt;span style=&#34;color:#a6e22e&#34;&gt;snippet&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample title&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample description&amp;#34;&lt;/span&gt; } },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;snippet&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-script-2&#34;&gt;Sample script 2&lt;/h2&gt;&#xA;&lt;p&gt;This sample script requests to the endpoint of YouTube API with UrlFetchApp by creating the request body. This script requests with &lt;code&gt;multipart/form-data&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updating Values of Sheet A with Values of Sheet B using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/11/02/updating-values-of-sheet-a-with-values-of-sheet-b-using-google-apps-script/</link>
      <pubDate>Tue, 02 Nov 2021 13:44:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/11/02/updating-values-of-sheet-a-with-values-of-sheet-b-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bd1e9de7cc22f89d3c8c7f90bf07e943&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211102a/fig1.png&#34;&#xA;     alt=&#34;Updating Values of Sheet A with Values of Sheet B using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for updating the values of &amp;ldquo;Sheet A&amp;rdquo; with the values of &amp;ldquo;Sheet B&amp;rdquo; using Google Apps Script. I often see this situation at Stackoverflow and other sites. So, in this post, I would like to introduce the sample script using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dst&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet2&amp;#34;&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A2:B&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getLastRow&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getValues&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, [&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;]) =&amp;gt; ((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;), {});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dst&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A2:A&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dst&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getLastRow&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getValues&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(([&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;]) =&amp;gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;dst&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setValues&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Of course, this situation can be also achieved with the built-in formula of Spreadsheet. For example, when the above image is used, the same result with the column &amp;ldquo;B&amp;rdquo; can be obtained at the column &amp;ldquo;C&amp;rdquo; by putting a formula of &lt;code&gt;=ARRAYFORMULA(VLOOKUP(A2:A11,Sheet2!A2:B6,2))&lt;/code&gt; to the cell &amp;ldquo;C2&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reducing Table Height of Table Inserted from Google Spreadsheet to Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/10/31/reducing-table-height-of-table-inserted-from-google-spreadsheet-to-google-slides-using-google-apps-script/</link>
      <pubDate>Sun, 31 Oct 2021 12:16:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/31/reducing-table-height-of-table-inserted-from-google-spreadsheet-to-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/659f3687f4ea5282f39ebf9b6d5ae54c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for reducing the table height of the table inserted from Google Spreadsheet to Google Slides using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211031a/fig1.png&#34;&#xA;     alt=&#34;Reducing Table Height of Table Inserted from Google Spreadsheet to Google Slides using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Google Slides. This sample script uses Slides API. So, please enable Slides API at Advanced Google services. &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enable_advanced_services&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Glyph Value from List Items of Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/10/29/retrieving-glyph-value-from-list-items-of-google-document-using-google-apps-script/</link>
      <pubDate>Fri, 29 Oct 2021 15:19:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/29/retrieving-glyph-value-from-list-items-of-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5f186b006c4803790318a75e65900c36&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the glyph value from the list items of Google Document using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, when the list is put to the Google Document, the count of glyph is automatically calculated. When the glyph values of the list items are tried to be retrieved using the manual operation and the script, unfortunately, the glyph values cannot be retrieved. Only the values of the list are retrieved. Unfortunately, it seems that in the current stage, there are no methods for directly retrieving the glyph value from the list items.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Images put with IMAGE function on Google Spreadsheet</title>
      <link>https://tanaikech.github.io/2021/10/29/report-images-put-with-image-function-on-google-spreadsheet/</link>
      <pubDate>Fri, 29 Oct 2021 10:28:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/29/report-images-put-with-image-function-on-google-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/10c55451caab9e291d5a571b157e8020&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a report about images put with &amp;ldquo;=IMAGE(IMAGE_URL)&amp;rdquo; function on Google Spreadsheet.&lt;/p&gt;&#xA;&lt;h3 id=&#34;experiment&#34;&gt;Experiment&lt;/h3&gt;&#xA;&lt;p&gt;When &amp;ldquo;=IMAGE(IMAGE_URL)&amp;rdquo; is put to a cell &amp;ldquo;A1&amp;rdquo; on Spreadsheet, the image is shown in the cell as shown in the following image.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211029a/fig1.png&#34;&#xA;     alt=&#34;Report: Images put with IMAGE function on Google Spreadsheet&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;For this situation, when the following script is run,&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;copyTo&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;, { &lt;span style=&#34;color:#a6e22e&#34;&gt;contentsOnly&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The following result is obtained. In this case, the formula is removed and an image can be seen as shown in the following image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>File Picker using Google Apps Script and Javascript without 3rd party</title>
      <link>https://tanaikech.github.io/2021/10/25/file-picker-using-google-apps-script-and-javascript-without-3rd-party/</link>
      <pubDate>Mon, 25 Oct 2021 14:50:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/25/file-picker-using-google-apps-script-and-javascript-without-3rd-party/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/File_Picker_using_Google_Apps_Script_and_Javascript_without_3rd_party&#34;&gt;GitHub&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211025a/fig1.gif&#34;&#xA;     alt=&#34;File Picker using Google Apps Script and Javascript without 3rd party&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for the file picker using Google Apps Script and Javascript without 3rd party. I had created the same sample script before. &lt;a href=&#34;https://gist.github.com/tanaikech/96166a32e7781fee22da9e498b2289d0&#34;&gt;Ref&lt;/a&gt; But, in the case of that script, jQuery is used. And, only Google Drive of own account could be used. In this sample script, 3rd party of jQuery is not used, and also, not only Google Drive of your own account, but also Google Drive of the service account can be used. By this, I thought that this file picker will be useful for various scenes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Values of Google Spreadsheet to Object using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/10/24/converting-values-of-google-spreadsheet-to-object-using-google-apps-script/</link>
      <pubDate>Sun, 24 Oct 2021 14:17:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/24/converting-values-of-google-spreadsheet-to-object-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/39d6402846c21502d41ecc7f78708e71&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211024a/fig1.png&#34;&#xA;     alt=&#34;Converting Values of Google Spreadsheet to Object using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting the values of Google Spreadsheet to an object using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;rows&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetName&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getDataRange&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getValues&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rows&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;) =&amp;gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;assign&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, { [&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;] }), {}));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When this script is run, the above sample image can be retrieved.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In this sample script, the 1st row of the sheet is used as the header row.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RichTextApp</title>
      <link>https://tanaikech.github.io/2021/10/20/updated-gas-library-richtextapp/</link>
      <pubDate>Wed, 20 Oct 2021 17:19:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/20/updated-gas-library-richtextapp/</guid>
      <description>&lt;h2 id=&#34;richtextapp-was-updated-to-v130&#34;&gt;RichTextApp was updated to v1.3.0&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.3.0 (October 20, 2021)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Added a new method of &lt;a href=&#34;https://github.com/tanaikech/RichTextApp#rangetohtmltableforspreadsheet&#34;&gt;&lt;code&gt;RangeToHTMLTableForSpreadsheet&lt;/code&gt;&lt;/a&gt;. In this method, the range on Google Spreadsheet is converted to a HTML table. Using this method, for example, you can send the specific range in the Spreadsheet as an email by including a HTML table.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211020a/fig1.png&#34;&#xA;     alt=&#34;Updated: GAS Library - RichTextApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can see the sample HTML table at &lt;a href=&#34;https://jsfiddle.net/oq9x458e/&#34;&gt;https://jsfiddle.net/oq9x458e/&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;I used this method for &lt;a href=&#34;https://stackoverflow.com/a/69626396/7108653&#34;&gt;this thread of Stackoverflow&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RichTextApp&#34;&gt;https://github.com/tanaikech/RichTextApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Taking Advantage of TextFinder for Google Spreadsheet</title>
      <link>https://tanaikech.github.io/2021/10/17/taking-advantage-of-textfinder-for-google-spreadsheet/</link>
      <pubDate>Sun, 17 Oct 2021 16:29:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/17/taking-advantage-of-textfinder-for-google-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/39f719bd10ccbb27edd694c33242e496&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is Class TextFinder in Spreadsheet service for Google Apps Script. &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/text-finder&#34;&gt;Ref&lt;/a&gt; The TextFinder can search and replace the texts in the Spreadsheet using Google Apps Script. There is the method for &lt;code&gt;createTextFinder&lt;/code&gt; in Class Spreadsheet, Class Sheet and Class Range. When these methods are used, you can search and replace the texts for all sheets in a Spreadsheet, the specific sheet, and the specific range in the specific sheet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing the Google Forms API</title>
      <link>https://tanaikech.github.io/2021/10/16/announcing-the-google-forms-api/</link>
      <pubDate>Sat, 16 Oct 2021 20:11:44 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/16/announcing-the-google-forms-api/</guid>
      <description>&lt;h2 id=&#34;announcing-the-google-forms-api&#34;&gt;&lt;a href=&#34;https://developers.googleblog.com/2021/10/announcing-google-forms-api_01768004272.html&#34;&gt;Announcing the Google Forms API&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Google is proud to announce the Google Forms API! The Forms API is currently available in Restricted Beta, with Open Beta expected to follow in Q4.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://developers.google.com/forms/api&#34;&gt;Forms API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending Multiple Emails using Batch Request with Gmail API using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/10/16/sending-multiple-emails-using-batch-request-with-gmail-api-using-google-apps-script/</link>
      <pubDate>Sat, 16 Oct 2021 10:04:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/16/sending-multiple-emails-using-batch-request-with-gmail-api-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/44e055214ab470c9b3143a469d7a7d21&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211016a/fig1.png&#34;&#xA;     alt=&#34;Sending Multiple Emails using Batch Request with Gmail API using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for sending multiple emails using the batch request with Gmail API using Google Apps Script. When multiple emails are sent using &amp;ldquo;GmailApp.sendEmail&amp;rdquo; and &amp;ldquo;MailApp.sendEmail&amp;rdquo;, a loop is used. But in this case, the process cost becomes high. In this post, I would like to introduce the sample script for reducing the process cost under this situation. Gmail API can be requested with the batch request. The batch request can be processed with the asynchronous process. By this, I thought that the process cost for sending multiple emails. So, this sample script sends multiple emails using the batch request with Gmail API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Putting All Response Values from Google Form to Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/10/15/putting-all-response-values-from-google-form-to-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 15 Oct 2021 13:54:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/15/putting-all-response-values-from-google-form-to-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/42ac2d72f62f2107b965f53239c2f398&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for putting all response values from Google Form to Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211015b/fig1.png&#34;&#xA;     alt=&#34;Putting All Response Values from Google Form to Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Google Spreadsheet and set the variables of &lt;code&gt;formId&lt;/code&gt; and &lt;code&gt;sheetName&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;formId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the Google Form ID.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the sheet name of sheet you want to put the values.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Retrieve all response values from Google Form.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FormApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;openById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;formId&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getItems&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getTitle&lt;/span&gt;())];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;, ...&lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getResponses&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;timeStamp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getTimestamp&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getItemResponses&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getResponse&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;assign&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        [&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getItem&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getTitle&lt;/span&gt;()]&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;isArray&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;,&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }, { &lt;span style=&#34;color:#a6e22e&#34;&gt;date&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;timeStamp&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }).&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;))];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Put the values to Spreadsheet.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetName&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setValues&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;When this script is run, all response values are retrieved from Google Form and put them to the Spreadsheet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At Google Form, when the empty answer is submitted, the question has no value. By this, it is required to consider this. So at first, the titles are retrieved from the items, and the values are created using the item titles. I thought that this might be an important point.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This sample script was used for the following threads.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/a/69537071/7108653&#34;&gt;Storing all forms answers in one single file&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/a/69564676/7108653&#34;&gt;How can I get the responses directly form a Google Form and send then to a new spreadsheet?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Large Decimal Numbers and Exponential Notation for Google Spreadsheet</title>
      <link>https://tanaikech.github.io/2021/10/15/large-decimal-numbers-and-exponential-notation-for-google-spreadsheet/</link>
      <pubDate>Fri, 15 Oct 2021 09:14:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/15/large-decimal-numbers-and-exponential-notation-for-google-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a1b32bdace0ebdd6c92a547b6f4dfbeb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this report, it has investigated the large decimal numbers and the exponential notation for Google Spreadsheet. When the large decimal numbers are put to the Spreadsheet, the Spreadsheet automatically sets the display value using the exponential notation. In this report, the result when the values are retrieved by Spreadsheet service and Sheets API is shown.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;At first, please create new Spreadsheet and open the script editor. And please copy and paste the following script. And, &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enable_advanced_services&#34;&gt;please enable Sheets API at Advanced Google services&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Cloud Champion Innovators</title>
      <link>https://tanaikech.github.io/2021/10/14/google-cloud-champion-innovators/</link>
      <pubDate>Thu, 14 Oct 2021 11:45:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/14/google-cloud-champion-innovators/</guid>
      <description>&lt;h2 id=&#34;google-cloud-innovators&#34;&gt;&lt;a href=&#34;https://cloud.google.com/innovators&#34;&gt;Google Cloud Innovators&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Regardless if you use Cloud to build, modernize, train, teach, or even for fun - in our eyes you are an Innovator.&#xA;The Innovators program is here to accelerate your learning and growth on Google Cloud, and to recognize you for the contributions you make to the broader Cloud community.&lt;/p&gt;&#xA;&lt;h3 id=&#34;champions&#34;&gt;&lt;a href=&#34;https://cloud.google.com/innovators/champions&#34;&gt;Champions&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;We recognize all these individuals for being at the top of their game technically - and for going further to inspire, invigorate, and challenge the Google Cloud community and our product teams by sharing their technical knowledge and contributing to conferences, open source projects, forums, blogs, workshops, community events, and social media.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending Gmail with Title and Body Including Emoji using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/10/11/sending-gmail-with-title-and-body-including-emoji-using-google-apps-script/</link>
      <pubDate>Mon, 11 Oct 2021 09:24:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/11/sending-gmail-with-title-and-body-including-emoji-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/187863d97d2b5e60938d8316574a2850&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for sending Gmail with the title and body including Emoji using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211011a/fig1.png&#34;&#xA;     alt=&#34;Sending Gmail with Title and Body Including Emoji using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;This sample script uses Gmail API. So please enable Gmail API at Advanced Google services. &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enable_advanced_services&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;convert_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ({ &lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;emailFrom&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;nameFrom&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;subject&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;textBody&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;htmlBody&lt;/span&gt; }) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;boundaryboundary&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mailData&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`MIME-Version: 1.0`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`To: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;nameFrom&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;emailFrom&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`From: &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nameFrom&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;emailFrom&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;gt;`&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`Subject: =?UTF-8?B?&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;base64Encode&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;subject&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Charset&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;UTF_8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;?=`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`Content-Type: multipart/alternative; boundary=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`--&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`Content-Type: text/plain; charset=UTF-8`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;textBody&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`--&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`Content-Type: text/html; charset=UTF-8`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`Content-Transfer-Encoding: base64`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;base64Encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;htmlBody&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Charset&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;UTF_8&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`--&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;--`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ].&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;base64EncodeWebSafe&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;mailData&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the email for `to`.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;emailFrom&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the email for `from`.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;nameFrom&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample name&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;subject&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello World 😃⭐&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;textBody&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample text body 😃⭐&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;htmlBody&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;p&amp;gt;Hello World 😃⭐&amp;lt;/p&amp;gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Gmail&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Users&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Messages&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;send&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;raw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;convert_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;) }, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;me&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;In order to use Emoji in the subject, the subject value is converted to the base64 data. And, it is used as &lt;code&gt;=?UTF-8?B?###?=&lt;/code&gt;. &lt;a href=&#34;https://www.php.net/manual/en/function.mail.php#refsect1-function.mail-seealso&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;About the method for including Emoji to the email body, I have answered it at &lt;a href=&#34;https://stackoverflow.com/a/50883782/7108653&#34;&gt;this thread of Stackoverflow&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I have answered this sample script at &lt;a href=&#34;https://stackoverflow.com/q/66077675/7108653&#34;&gt;this thread of Stackoverflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Compiling Continuous Numbers using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/10/08/compiling-continuous-numbers-using-google-apps-script/</link>
      <pubDate>Fri, 08 Oct 2021 21:01:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/08/compiling-continuous-numbers-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5a43281964b739ead2b7ae2401400630&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for compiling the continuous numbers using Google Apps Script. For example, the values of &lt;code&gt;[4, 5, 9, 3, 10, 5, 11, 7, 7, 13, 1]&lt;/code&gt; are converted to &lt;code&gt;[&amp;quot;1&amp;quot;,&amp;quot;3-5&amp;quot;,&amp;quot;7&amp;quot;,&amp;quot;9-11&amp;quot;,&amp;quot;13&amp;quot;]&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;compilingNumbers&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt; } &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Set&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;))].&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    { &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [], &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [] }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;13&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]; &lt;span style=&#34;color:#75715e&#34;&gt;// This is sample values.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;compilingNumbers&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(({ &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;end&lt;/span&gt; }) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;end&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When this script is run, &lt;code&gt;console.log(values)&lt;/code&gt; and &lt;code&gt;console.log(res)&lt;/code&gt; show &lt;code&gt;[{&amp;quot;start&amp;quot;:1,&amp;quot;end&amp;quot;:1},{&amp;quot;start&amp;quot;:3,&amp;quot;end&amp;quot;:5},{&amp;quot;start&amp;quot;:7,&amp;quot;end&amp;quot;:7},{&amp;quot;start&amp;quot;:9,&amp;quot;end&amp;quot;:11},{&amp;quot;start&amp;quot;:13,&amp;quot;end&amp;quot;:13}]&lt;/code&gt; and &lt;code&gt;[&amp;quot;1&amp;quot;,&amp;quot;3-5&amp;quot;,&amp;quot;7&amp;quot;,&amp;quot;9-11&amp;quot;,&amp;quot;13&amp;quot;]&lt;/code&gt;, respectively. From this result, it is found that the continuous numbers were compiled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending Outlook Emails using Microsoft Account with Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/10/05/sending-outlook-emails-using-microsoft-account-with-google-apps-script/</link>
      <pubDate>Tue, 05 Oct 2021 08:57:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/05/sending-outlook-emails-using-microsoft-account-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0745889227e43c385d190385fff91598&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for sending Outlook emails using Microsoft account with Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211005a/fig1.png&#34;&#xA;     alt=&#34;Sending Outlook Emails using Microsoft Account with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Before you use this script, please install OnedriveApp which is Google Apps Script library. &lt;a href=&#34;https://github.com/tanaikech/OnedriveApp#how-to-install&#34;&gt;Ref&lt;/a&gt; And, please authorize your Microsoft account for using Microsoft Graph API. &lt;a href=&#34;https://github.com/tanaikech/OnedriveApp#retrieve-access-token-and-refresh-token-for-using-onedrive&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [{ &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### name ###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### email address ###&amp;#34;&lt;/span&gt; }, , ,],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;subject&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample subject 1&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample text body&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;cc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [{ &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;emailaddress1&amp;#34;&lt;/span&gt; }, , ,],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [{ &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### name ###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### email address ###&amp;#34;&lt;/span&gt; }, , ,],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;subject&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample subject 2&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;htmlBody&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;sample html body&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;attachments&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;bcc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [{ &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;emailaddress1&amp;#34;&lt;/span&gt; }, , ,],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;prop&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PropertiesService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getScriptProperties&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;odapp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;OnedriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;init&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;prop&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;odapp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sendEmails&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this sample script, 2 emails are sent using Microsoft Graph API with your Microsoft account. By this, both Outlook Emails and Google Emails can be used by Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving List of All Emails of Microsoft Account using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/10/04/retrieving-list-of-all-emails-of-microsoft-account-using-google-apps-script/</link>
      <pubDate>Mon, 04 Oct 2021 16:21:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/04/retrieving-list-of-all-emails-of-microsoft-account-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/45a5511cf2a4a42660b52b3409f7b537&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the list of all emails of Microsoft account and putting them to Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20211004a/fig1.png&#34;&#xA;     alt=&#34;Retrieving List of All Emails of Microsoft Account using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I updated OnedriveApp to v1.2.0 by adding &lt;a href=&#34;https://github.com/tanaikech/OnedriveApp#utilities&#34;&gt;1 method for retrieving the access token&lt;/a&gt; and &lt;a href=&#34;https://github.com/tanaikech/OnedriveApp#email&#34;&gt;7 methods for managing emails of Microsoft account&lt;/a&gt;. By this, the emails got to be able to be gotten and sent using Microsoft account using OnedriveApp with Google Apps Script.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2021/10/04/updated-gas-library-onedriveapp/</link>
      <pubDate>Mon, 04 Oct 2021 16:16:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/04/updated-gas-library-onedriveapp/</guid>
      <description>&lt;p&gt;OnedriveApp was updated to v1.2.0.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.0 (October 4, 2021)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp#utilities&#34;&gt;1 method for retrieving the access token&lt;/a&gt; and &lt;a href=&#34;https://github.com/tanaikech/OnedriveApp#email&#34;&gt;7 methods for managing emails of Microsoft account&lt;/a&gt; were added. By this, the emails got to be able to be gotten and sent using Microsoft account using OnedriveApp with Google Apps Script.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;GitHub of OnedriveApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stackoverflow is Currently Read-only Mode</title>
      <link>https://tanaikech.github.io/2021/10/01/stackoverflow-is-currently-read-only-mode/</link>
      <pubDate>Fri, 01 Oct 2021 10:22:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/10/01/stackoverflow-is-currently-read-only-mode/</guid>
      <description>&lt;p&gt;It seems that this is due to &lt;a href=&#34;https://meta.stackexchange.com/q/370331&#34;&gt;Planned network maintenance scheduled for Friday, October 1 at 01:00-04:00 UTC (Thursday, September 30 at 9:00 PM-midnight EDT)&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2021/09/29/updated-gas-library-onedriveapp/</link>
      <pubDate>Wed, 29 Sep 2021 09:16:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/09/29/updated-gas-library-onedriveapp/</guid>
      <description>&lt;p&gt;OnedriveApp was updated to v1.1.2.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.2 (September 29, 2021)&lt;/p&gt;&#xA;&lt;p&gt;A bug of method of &lt;code&gt;uploadFile&lt;/code&gt; was removed. By this, the files except for Google Docs files can be uploaded to OneDrive.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;GitHub of OnedriveApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Directly Submitting Answers to Google Form using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/09/27/directly-submitting-answers-to-google-form-using-google-apps-script/</link>
      <pubDate>Mon, 27 Sep 2021 09:33:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/09/27/directly-submitting-answers-to-google-form-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b4a31a51cbb0ef84c871e6fb96e1502e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for directly submitting answers to Google Form using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The sample Google Form is as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20210927a/fig1.png&#34;&#xA;     alt=&#34;Directly Submitting Answers to Google Form using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;For this Google Form, this sample script submits the values of &lt;code&gt;sample text&lt;/code&gt;, &lt;code&gt;option2&lt;/code&gt; and &lt;code&gt;option1, option2, sample option&lt;/code&gt; to Google Form.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;For the multiple answers, it seems that it is required to send the values as the query parameter. I thought that the same key is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Donation</title>
      <link>https://tanaikech.github.io/2021/09/26/about-donation/</link>
      <pubDate>Sun, 26 Sep 2021 17:05:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/09/26/about-donation/</guid>
      <description>&lt;p&gt;From before, I have gotten several contacts about the donation to me. Thank you so much. So, today I could prepare the PayPal.Me. You can donate to me using the following URL.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://paypal.me/tanaikech&#34;&gt;https://paypal.me/tanaikech&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Donate</title>
      <link>https://tanaikech.github.io/donate/</link>
      <pubDate>Sun, 26 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://tanaikech.github.io/donate/</guid>
      <description>&lt;h2 id=&#34;donate&#34;&gt;Donate&lt;/h2&gt;&#xA;&lt;p&gt;September 26, 2021: From before, I have gotten several contacts about the donation to me. Thank you so much. So, today I could prepare the PayPal.Me. You can donate to me using the following URL.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://paypal.me/tanaikech&#34;&gt;https://paypal.me/tanaikech&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing Template Texts with Array in Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/09/25/replacing-template-texts-with-array-in-google-document-using-google-apps-script/</link>
      <pubDate>Sat, 25 Sep 2021 14:20:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/09/25/replacing-template-texts-with-array-in-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7fc15c4e8ecccbedd469d8d778880834&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for replacing the template texts with an array in Google Document using Google Apps Script. This is for Google Apps Script of &lt;a href=&#34;https://tanaikech.github.io/2021/09/25/replacing-template-texts-with-array-in-google-document-using-docs-api-with-python/&#34;&gt;this report&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The sample input and output situations are as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20210925a/fig1.png&#34;&#xA;     alt=&#34;Replacing Template Texts with Array in Google Document using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, when &lt;code&gt;replaceAllText&lt;/code&gt; of Docs API is used with the sample value of &lt;code&gt;[&amp;quot;updated text 1&amp;quot;, &amp;quot;updated text 2&amp;quot;, &amp;quot;updated text 3&amp;quot;]&lt;/code&gt;, all values of &lt;code&gt;{{oldText}}&lt;/code&gt; are replaced with the 1st value of &lt;code&gt;updated text 1&lt;/code&gt; in one batch request. So in order to replace each &lt;code&gt;{{oldText}}&lt;/code&gt; with &lt;code&gt;[&amp;quot;updated text 1&amp;quot;, &amp;quot;updated text 2&amp;quot;, &amp;quot;updated text 3&amp;quot;]&lt;/code&gt;, it is required to use a workaround. So I proposed &lt;a href=&#34;https://tanaikech.github.io/2021/09/25/replacing-template-texts-with-array-in-google-document-using-docs-api-with-python/&#34;&gt;this report&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing Template Texts with Array in Google Document using Docs API with Python</title>
      <link>https://tanaikech.github.io/2021/09/25/replacing-template-texts-with-array-in-google-document-using-docs-api-with-python/</link>
      <pubDate>Sat, 25 Sep 2021 10:51:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/09/25/replacing-template-texts-with-array-in-google-document-using-docs-api-with-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f1f9fb91d3432362670c810ae05ba53b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for replacing the template texts with an array in Google Document using Docs API with Python.&lt;/p&gt;&#xA;&lt;p&gt;The sample input and output situations are as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20210925a/fig1.png&#34;&#xA;     alt=&#34;Replacing Template Texts with Array in Google Document using Docs API with Python&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, when &lt;code&gt;replaceAllText&lt;/code&gt; of Docs API is used with the sample value of &lt;code&gt;[&amp;quot;updated text 1&amp;quot;, &amp;quot;updated text 2&amp;quot;, &amp;quot;updated text 3&amp;quot;]&lt;/code&gt;, all values of &lt;code&gt;{{oldText}}&lt;/code&gt; are replaced with the 1st value of &lt;code&gt;updated text 1&lt;/code&gt; in one batch request. So in order to replace each &lt;code&gt;{{oldText}}&lt;/code&gt; with &lt;code&gt;[&amp;quot;updated text 1&amp;quot;, &amp;quot;updated text 2&amp;quot;, &amp;quot;updated text 3&amp;quot;]&lt;/code&gt;, it is required to use a workaround.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Executing Function with Minutes timer in Specific Times using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/09/22/executing-function-with-minutes-timer-in-specific-times-using-google-apps-script/</link>
      <pubDate>Wed, 22 Sep 2021 15:59:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/09/22/executing-function-with-minutes-timer-in-specific-times-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6608e901272077cbc3738366ec5fe0b3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for executing a function with the minutes timer in the specific times using Google Apps Script. For example, when this sample script is used, the following situation can be achieved.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Execute a function every 10 minutes only in 09:00 - 12:00 and 15:00 - 18:00 for the weekday.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When the above situation is shown as an image, it becomes as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20210922a/fig1.png&#34;&#xA;     alt=&#34;Executing Function with Minutes timer in Specific Times using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simply Editing Texts of Texts Boxes on Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/09/20/simply-editing-texts-of-texts-boxes-on-google-slides-using-google-apps-script/</link>
      <pubDate>Mon, 20 Sep 2021 10:22:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/09/20/simply-editing-texts-of-texts-boxes-on-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/aa0a03ba3c440ca72fc1d7e02f038f7c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/image-storage/20210920a/fig1.gif&#34;&#xA;     alt=&#34;Simply Editing Texts of Texts Boxes on Google Slides using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for simply editing the texts of texts boxes on Google Slides using Google Apps Script. The supposed situation is as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Google Slides has several text boxes of the same size and the same position.&lt;/li&gt;&#xA;&lt;li&gt;You want to retrieve the list of texts from the text boxes and want to change the texts using a simpler method.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In this case, I thought that when the sidebar created by Google Apps Script is used for changing the texts, your goal might be able to be simply achieved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Concurrent Writing to Google Spreadsheet using Form</title>
      <link>https://tanaikech.github.io/2021/09/15/benchmark-concurrent-writing-to-google-spreadsheet-using-form/</link>
      <pubDate>Wed, 15 Sep 2021 14:42:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/09/15/benchmark-concurrent-writing-to-google-spreadsheet-using-form/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c2f3fccabbf4906a18fdc38463982f31&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Published: September 15, 2021&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Updated: September 17, 2021&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;From &lt;a href=&#34;https://twitter.com/mhawksey/status/1438593557888212992&#34;&gt;the discussions&lt;/a&gt;, added data by changing the wait time of LockService for Web Apps.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;When the users try to write to a Spreadsheet using a form, the developers have to consider the concurrent submission from the form. For example, when multiple users submit the data with the form simultaneously, all data are possibly not to be saved to the Spreadsheet. So it is considered that it is important to know the information about the concurrent writing to Google Spreadsheet using a form. In this report, such a situation was investigated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Google API Client Library (gapi) for JavaScript with Service Account</title>
      <link>https://tanaikech.github.io/2021/05/27/using-google-api-client-library-gapi-for-javascript-with-service-account/</link>
      <pubDate>Thu, 27 May 2021 15:08:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/05/27/using-google-api-client-library-gapi-for-javascript-with-service-account/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/603102a64587cb9bff2e165994f6b6a1&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for using Google API Client Library (gapi) for JavaScript with the service account. Unfortunately, in the current stage, gapi cannot directly use the service account. So, in this case, it is required to implement the script for retrieving the access token from the service account. In this report, I would like to introduce the method for using gapi with the service account using a Javascript library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Javascript library - GetAccessTokenFromServiceAccount_js</title>
      <link>https://tanaikech.github.io/2021/05/27/javascript-library-getaccesstokenfromserviceaccount_js/</link>
      <pubDate>Thu, 27 May 2021 15:03:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/05/27/javascript-library-getaccesstokenfromserviceaccount_js/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Javascript library to retrieve the access token from the Google Service Account. &lt;a href=&#34;https://cloud.google.com/iam/docs/service-accounts&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;I have already posted the sample script for retrieving the access token from the Google Service Account. &lt;a href=&#34;https://tanaikech.github.io/2020/12/19/retrieving-access-token-for-service-account-using-javascript/&#34;&gt;Ref&lt;/a&gt; But, when I use this script, I thought that when this was published as the Javascript library, it will be useful. So I created this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;getaccesstokengromserviceaccount_js.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or, using jsdelivr cdn&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdn.jsdelivr.net/gh/tanaikech/GetAccessTokenFromServiceAccount_js@master/getaccesstokengromserviceaccount_js.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;You can see the detail of this at &lt;a href=&#34;https://github.com/tanaikech/GetAccessTokenFromServiceAccount_js&#34;&gt;https://github.com/tanaikech/GetAccessTokenFromServiceAccount_js&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Hidden Rows and Showing Rows by Filter View on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/05/21/retrieving-hidden-rows-and-showing-rows-by-filter-view-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 21 May 2021 11:56:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/05/21/retrieving-hidden-rows-and-showing-rows-by-filter-view-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/43eee17899a3d0a99817f3a2032ae937&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the hidden rows and showing rows by the filter view on Google Spreadsheet using Google Apps Script. In the current stage, there are no methods for directly retrieving the hidden rows and showing rows by the filter view in Spreadsheet service (&lt;code&gt;SpreadsheetApp&lt;/code&gt;). And, &lt;code&gt;isRowHiddenByFilter&lt;/code&gt; of Class Sheet cannot be used for the filter view. But, fortunately, when Sheets API is used, the filter view can be retrieved and created. In this report, the hidden rows and showing rows by the filter view are retrieved using Sheets API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Process Costs for Retrieving 1st Empty Cell and 1st Non Empty Cell of Specific Column in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/05/19/benchmark-process-costs-for-retrieving-1st-empty-cell-and-1st-non-empty-cell-of-specific-column-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 19 May 2021 13:47:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/05/19/benchmark-process-costs-for-retrieving-1st-empty-cell-and-1st-non-empty-cell-of-specific-column-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/61cbda29436795f199a9e4244e0bf5fe&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Here, I would like to report the process costs for retrieving the 1st empty cell or 1st non empty cell of the specific column of Google Spreadsheet using Google Apps Script (GAS). For this situations, the following 2 patterns can be considered.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Retrieving 1st empty cell of specific column by searching from &lt;strong&gt;TOP&lt;/strong&gt; of sheet&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Retrieving 1st NON empty cell of specific column by searching from &lt;strong&gt;BOTTOM&lt;/strong&gt; of sheet&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Access Token using Service Account for PHP without using googleapis</title>
      <link>https://tanaikech.github.io/2021/05/01/retrieving-access-token-using-service-account-for-php-without-using-googleapis/</link>
      <pubDate>Sat, 01 May 2021 11:54:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/05/01/retrieving-access-token-using-service-account-for-php-without-using-googleapis/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1b47cfec588454963ee40c5a50943194&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample PHP script to retrieve the access token from Service Account of Google without using googleapis.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$private_key &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-----BEGIN PRIVATE KEY-----&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;###-----END PRIVATE KEY-----&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// private_key of JSON file retrieved by creating Service Account&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$client_email &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// client_email of JSON file retrieved by creating Service Account&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$scopes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/auth/drive.readonly&amp;#34;&lt;/span&gt;]; &lt;span style=&#34;color:#75715e&#34;&gt;// Sample scope&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/oauth2/v4/token&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$header &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;array&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;alg&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RS256&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;typ&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JWT&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$now &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$claim &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;array&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;iss&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; $client_email,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sub&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; $client_email,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;scope&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;implode&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;, $scopes),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aud&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; $url,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;exp&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;string&lt;/span&gt;)($now &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3600&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;iat&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;string&lt;/span&gt;)$now,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$signature &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;base64_encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;json_encode&lt;/span&gt;($header, &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON_UNESCAPED_SLASHES&lt;/span&gt;)) &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;base64_encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;json_encode&lt;/span&gt;($claim, &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON_UNESCAPED_SLASHES&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$b &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;openssl_sign&lt;/span&gt;($signature, $b, $private_key, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SHA256&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$jwt &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $signature &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;base64_encode&lt;/span&gt;($b);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$curl_handle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;curl_init&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl_setopt_array&lt;/span&gt;($curl_handle, [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;CURLOPT_URL&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; $url,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;CURLOPT_POST&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;CURLOPT_POSTFIELDS&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;array&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;assertion&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; $jwt,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;grant_type&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;urn:ietf:params:oauth:grant-type:jwt-bearer&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;curl_exec&lt;/span&gt;($curl_handle);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl_close&lt;/span&gt;($curl_handle);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$obj &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;json_decode&lt;/span&gt;($res);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$accessToken &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $obj &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;access_token&amp;#39;&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt;($accessToken &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// This is the script for testing the access token. The file list of the service account&amp;#39;s Drive is retrieved using Drive API.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$curl_test &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;curl_init&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl_setopt&lt;/span&gt;($curl_test, &lt;span style=&#34;color:#a6e22e&#34;&gt;CURLOPT_URL&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.googleapis.com/drive/v3/files?access_token=&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; $accessToken);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl_setopt&lt;/span&gt;($curl_test, &lt;span style=&#34;color:#a6e22e&#34;&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$response &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;curl_exec&lt;/span&gt;($curl_test);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt;($response);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/identity/protocols/oauth2/service-account&#34;&gt;Using OAuth 2.0 for Server to Server Applications&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jwt.io/&#34;&gt;jwt.io&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I answered this sample script for &lt;a href=&#34;https://stackoverflow.com/q/67338219&#34;&gt;this thread in Stackoverflow&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Changing Font of Selected Text to &#39;Google Sans&#39; on Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/04/28/changing-font-of-selected-text-to-google-sans-on-google-document-using-google-apps-script/</link>
      <pubDate>Wed, 28 Apr 2021 17:46:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/04/28/changing-font-of-selected-text-to-google-sans-on-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4700361cc060ae4333672da905d272c7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for changing the font of selected text to Google Sans on Google Document using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20210428a-fig1.gif&#34;&#xA;     alt=&#34;Changing Font of Selected Text to &amp;#39;Google Sans&amp;#39; on Google Document using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Google Document And, when you use this script, please select a text in Google Document and run the script. By this, the font of selected text is changed to &lt;code&gt;Google Sans&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Specification of Search Query for File List Method in Drive API</title>
      <link>https://tanaikech.github.io/2021/04/27/specification-of-search-query-for-file-list-method-in-drive-api/</link>
      <pubDate>Tue, 27 Apr 2021 15:58:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/04/27/specification-of-search-query-for-file-list-method-in-drive-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/268baf07f92f3b3962c86c6ea75b786a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this report, I would like to report about the current specification of the search query for the file list method in Drive API.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I noticed that the specification of the search query for the file list method in Drive API might have been changed. I thought that to know the change of specification of the search query is important for creating the application using Drive API. In this report, I would like to introduce the current specification of the search query.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Colorful Buttons on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/04/19/creating-colorful-buttons-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 19 Apr 2021 15:56:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/04/19/creating-colorful-buttons-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5eedf04fa0f7727570b8e4c45b84a1f1&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating the colorful buttons on Google Spreadsheet on Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In order to achieve this, I have been looking for the method for creating the PNG image with the alpha channel using Google Apps Script. Recently, finally, I could find it. By this, the goal of this report got to be able to be achieved by &lt;a href=&#34;https://github.com/tanaikech/Creating-PNG-Image-with-Alpha-Channel-using-Google-Apps-Script&#34;&gt;the report of &amp;ldquo;Creating PNG Image with Alpha Channel using Google Apps Script&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating PNG Image with Alpha Channel using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/04/19/creating-png-image-with-alpha-channel-using-google-apps-script/</link>
      <pubDate>Mon, 19 Apr 2021 15:50:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/04/19/creating-png-image-with-alpha-channel-using-google-apps-script/</guid>
      <description>&lt;p&gt;This is a sample script for creating a PNG image with &lt;a href=&#34;https://en.wikipedia.org/wiki/Alpha_compositing&#34;&gt;the alpha channel&lt;/a&gt; using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The PNG image with the alpha channel is the image includes the transparent background. I have been looking for the method for creating such image using Google Apps Script. It is considered that when this will be achieved, it will be able to be used for various situations. For example, it is considered the following situations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Bug of New IDE about Time Zone of Google Apps Script project was removed</title>
      <link>https://tanaikech.github.io/2021/04/06/a-bug-of-new-ide-about-time-zone-of-google-apps-script-project-was-removed/</link>
      <pubDate>Tue, 06 Apr 2021 16:57:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/04/06/a-bug-of-new-ide-about-time-zone-of-google-apps-script-project-was-removed/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e15f437e870425e388aba374a0066c3a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I had confirmed a bug of new IDE about the time zone of Google Apps script project. When I created new Google Apps Script project using new IDE, the time zone of GAS project is always &lt;code&gt;America/New_York&lt;/code&gt;. In my area, it&amp;rsquo;s &lt;code&gt;Asia/Tokyo&lt;/code&gt;. The time zone can be confirmed at &lt;code&gt;appscript.json&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So, I had reported this issue to Google issue tracker. &lt;a href=&#34;https://issuetracker.google.com/issues/175718931&#34;&gt;Ref&lt;/a&gt; After I posted this, I had also confirmed this issue at Stackoverflow. &lt;a href=&#34;https://stackoverflow.com/a/66201544&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Plotting Points on Image using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/04/02/plotting-points-on-image-using-google-apps-script/</link>
      <pubDate>Fri, 02 Apr 2021 15:27:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/04/02/plotting-points-on-image-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fbb16f1eb43b3bafa93323461a500640&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for plotting the points on an image using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, there are no methods for directly editing the image and putting the texts and some shapes in the methods for Google Apps Script. So in this case, it is required to use the workaround.&lt;/p&gt;&#xA;&lt;p&gt;Fortunately, I have already published a report about &amp;ldquo;Inserting Text on Image using Google Apps Script&amp;rdquo; in my blog. &lt;a href=&#34;https://gist.github.com/tanaikech/835642df109731a559e52d831bd3342d&#34;&gt;Ref&lt;/a&gt; In this report, this sample is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Redeploying Web Apps without Changing URL of Web Apps for new IDE</title>
      <link>https://tanaikech.github.io/2021/03/29/redeploying-web-apps-without-changing-url-of-web-apps-for-new-ide/</link>
      <pubDate>Mon, 29 Mar 2021 14:51:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/03/29/redeploying-web-apps-without-changing-url-of-web-apps-for-new-ide/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ebf92d8f427d02d53989d6c3464a9c43&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;At March 15, 2021, one endpoint is created for one deployment. &lt;a href=&#34;https://developers.google.com/apps-script/releases/#march_15_2021&#34;&gt;Ref&lt;/a&gt; By this, when you redeploy &amp;ldquo;Web Apps&amp;rdquo;, the endpoint is changed. Because the deployment ID is changed. It seems that this it the new specification. In this report, I would like to introduce the method for redeploying Web Apps without changing the URL of Web Apps for new IDE.&lt;/p&gt;&#xA;&lt;h2 id=&#34;deploy-web-apps&#34;&gt;Deploy Web Apps&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Open &amp;ldquo;New deployment&amp;rdquo; dialog with &amp;ldquo;Deploy&amp;rdquo; -&amp;gt; &amp;ldquo;New deployment&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linking Google Cloud Platform Project to Google Apps Script Project for New IDE</title>
      <link>https://tanaikech.github.io/2021/03/29/linking-google-cloud-platform-project-to-google-apps-script-project-for-new-ide/</link>
      <pubDate>Mon, 29 Mar 2021 12:45:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/03/29/linking-google-cloud-platform-project-to-google-apps-script-project-for-new-ide/</guid>
      <description>&lt;p&gt;This is the document for linking Google Cloud Platform Project to Google Apps Script Project for New IDE. And also, several sample scripts using Google Apps Script API and Google Photos API are introduced.&lt;/p&gt;&#xA;&lt;p&gt;You can see the detail of this document at &lt;a href=&#34;https://github.com/tanaikech/Linking-Google-Cloud-Platform-Project-to-Google-Apps-Script-Project-for-New-IDE&#34;&gt;https://github.com/tanaikech/Linking-Google-Cloud-Platform-Project-to-Google-Apps-Script-Project-for-New-IDE&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Copying Protections for Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/03/26/copying-protections-for-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 26 Mar 2021 10:43:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/03/26/copying-protections-for-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b22a76d419a6bdbfa064f5b31f6eae8e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for copying the protections for Spreadsheet using Google Apps Script. When several protections of the sheet protection and the range protection are set to a Google Spreadsheet and the Spreadsheet is copied using the script and the manual copy with the browser, unfortunately, the protections of ranges are not copied. And also, the protections of sheets can be copied. But, the editor emails are not included. It seems that this is the current specification.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact form on this blog</title>
      <link>https://tanaikech.github.io/2021/03/15/contact-form-on-this-blog/</link>
      <pubDate>Mon, 15 Mar 2021 21:29:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/03/15/contact-form-on-this-blog/</guid>
      <description>&lt;p&gt;Now, I confirmed that &lt;a href=&#34;https://tanaikech.github.io/contact/&#34;&gt;the contact form on this blog&lt;/a&gt; was required to be reauthorized. By this, I reauthorized it and confirm that &lt;a href=&#34;https://sites.google.com/view/tanaikecontactform&#34;&gt;the contact form&lt;/a&gt; can be used now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: CLI Tool - gislack</title>
      <link>https://tanaikech.github.io/2021/02/27/updated-cli-tool-gislack/</link>
      <pubDate>Sat, 27 Feb 2021 13:53:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/02/27/updated-cli-tool-gislack/</guid>
      <description>&lt;p&gt;gislack is a CLI tool to submit files to both Gist and Slack.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.4 (February 27, 2021)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I noticed that this application uses the duplicated methods of Slack API. &lt;a href=&#34;https://api.slack.com/methods&#34;&gt;Ref&lt;/a&gt; By this, the duplicated methods were updated to the new methods as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;From &amp;ldquo;channels.list&amp;rdquo; to &amp;ldquo;conversations.list&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;From &amp;ldquo;channels.history&amp;rdquo; to &amp;ldquo;conversations.history&amp;rdquo;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Please check it out. &lt;a href=&#34;https://github.com/tanaikech/gislack&#34;&gt;https://github.com/tanaikech/gislack&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Javascript library - HtmlFormObjectParserForGoogleAppsScript_js</title>
      <link>https://tanaikech.github.io/2021/02/13/javascript-library-htmlformobjectparserforgoogleappsscript_js/</link>
      <pubDate>Sat, 13 Feb 2021 17:11:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/02/13/javascript-library-htmlformobjectparserforgoogleappsscript_js/</guid>
      <description>&lt;h2 id=&#34;parser-for-sending-html-form-object-to-google-apps-script-using-googlescriptrun&#34;&gt;Parser for Sending HTML Form Object to Google Apps Script using google.script.run&lt;/h2&gt;&#xA;&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;&#xA;&lt;p&gt;This is a Javascript library for sending the HTML form object to Google Apps Script using &lt;code&gt;google.script.run&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20210213a-fig1.png&#34;&#xA;     alt=&#34;Javascript library - HtmlFormObjectParserForGoogleAppsScript_js&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;&#xA;&lt;p&gt;HTML form object is parsed by this library, and the object can be sent to Google Apps Script using &lt;code&gt;google.script.run&lt;/code&gt;. After the V8 runtime got to be able to be used for Google Apps Script, when the file input tag is included in the HTML form object, the object sent to Google Apps Script using &lt;code&gt;google.script.run&lt;/code&gt; cannot be directly used. Because it seems that the binary file data cannot be parsed when it is sent with &lt;code&gt;google.script.run&lt;/code&gt;. &lt;a href=&#34;https://stackoverflow.com/a/60748334&#34;&gt;Ref&lt;/a&gt; In the current stage, as the workaround, the file data is required to be sent to Google Apps Script using &lt;code&gt;google.script.run&lt;/code&gt; after it was converted to the byte array and the base64 data. I think that this might be resolved in the future update. But I thought that as the current workaround, when the parser for converting this is prepared, it might be useful for users, because I saw the several questions which have this issue at Stackoverflow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>XPath Tester using Web Apps Created by Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/02/02/xpath-tester-using-web-apps-created-by-google-apps-script/</link>
      <pubDate>Tue, 02 Feb 2021 18:15:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/02/02/xpath-tester-using-web-apps-created-by-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8a596d235205ba443452aeb510220477&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this post, I would like to introduce the xpath tester using Web Apps created by Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20210202a-fig1.gif&#34;&#xA;     alt=&#34;XPath Tester using Web Apps Created by Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-prepare-google-spreadsheet&#34;&gt;1. Prepare Google Spreadsheet.&lt;/h3&gt;&#xA;&lt;p&gt;Please create new Google Spreadsheet on your Google Drive.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-enable-sheets-api&#34;&gt;2. Enable Sheets API.&lt;/h3&gt;&#xA;&lt;p&gt;Please open the script editor at the created new Spreadsheet and &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enable_advanced_services&#34;&gt;enable Sheets API at Advanced Google services&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-prepare-sample-script&#34;&gt;3. Prepare sample script.&lt;/h3&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor on the created new Spreadsheet and save it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Photo Gallery Created by Google Slides and Web Apps using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/01/24/simple-photo-gallery-created-by-google-slides-and-web-apps-using-google-apps-script/</link>
      <pubDate>Sun, 24 Jan 2021 15:56:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/01/24/simple-photo-gallery-created-by-google-slides-and-web-apps-using-google-apps-script/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a sample script for achieving a simple photo gallery created by Google Slides and Web Apps using Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;At Google, there is a great Google Photos. &lt;a href=&#34;https://www.google.com/photos/about/&#34;&gt;Ref&lt;/a&gt; Recently, I was required to have a simple photo gallery. At that time, I thought that when an independence photo gallery instead of Google Photos can be used, it will be useful. Also, this might be useful&#xA;for other users. So I published this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trend of google-apps-script Tag on Stackoverflow 2021</title>
      <link>https://tanaikech.github.io/2021/01/16/trend-of-google-apps-script-tag-on-stackoverflow-2021/</link>
      <pubDate>Sat, 16 Jan 2021 15:46:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/01/16/trend-of-google-apps-script-tag-on-stackoverflow-2021/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/18519c3177e284638dce9113ec7ab5b1&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Published: January 16, 2021&lt;/p&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At Stackoverflow, a lot of people post the questions and answers to the questions every day. There are various tags in Stackoverflow. A lot of discussions are performed at each tag. Their discussions bring the important information and are much useful for a lot of people. As one of tags, there is &amp;ldquo;google-apps-script&amp;rdquo;. I sometimes discuss at the questions with that tag. When we see the discussions, we can notice that the discussions are changed and progressed by the time, because &amp;ldquo;Google Apps Script&amp;rdquo; which is the origin of the tag is updated. This report thinks this change as the trend of tag of &amp;ldquo;google-apps-script&amp;rdquo;. This trend includes the number of questions, questioners, answerers and tags adding to the tag of &amp;ldquo;google-apps-script&amp;rdquo;. The trend of tag of &amp;ldquo;google-apps-script&amp;rdquo; is deeply related to the progression of Google Apps Script and the various applications for Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Custom Grid View of Google Slides as Image and Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/01/13/creating-custom-grid-view-of-google-slides-as-image-and-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 13 Jan 2021 12:19:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/01/13/creating-custom-grid-view-of-google-slides-as-image-and-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c94b79819167e96f6d9268d066989112&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating the custom grid view of Google Slides as an image using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20210113a-fig1.gif&#34;&#xA;     alt=&#34;Creating Custom Grid View of Google Slides as Image and Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;In order to use this script, please do the following flow.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-install-gas-library&#34;&gt;1. Install GAS library&lt;/h3&gt;&#xA;&lt;p&gt;This sample script uses a library of &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp&#34;&gt;DocsServiceApp&lt;/a&gt;. So please install DocsServiceApp. You can see the method for installing it at &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp#how-to-install&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - BatchRequest</title>
      <link>https://tanaikech.github.io/2021/01/13/updated-gas-library-batchrequest/</link>
      <pubDate>Wed, 13 Jan 2021 09:53:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/01/13/updated-gas-library-batchrequest/</guid>
      <description>&lt;h2 id=&#34;batchrequest-was-updated-to-v113&#34;&gt;BatchRequest was updated to v1.1.3.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.3 (January 13, 2021)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In order to give the access token from outside, the access token got to be able to be included in the object. By this, for example, you can use the access token retrieved by the service account.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/BatchRequest&#34;&gt;https://github.com/tanaikech/BatchRequest&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding Slide Page Link to Shape using Google Apps Script</title>
      <link>https://tanaikech.github.io/2021/01/10/adding-slide-page-link-to-shape-using-google-apps-script/</link>
      <pubDate>Sun, 10 Jan 2021 16:00:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/01/10/adding-slide-page-link-to-shape-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/444379309f1d0f69287c5a8becdc271d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for adding the slide page link to the shape using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When I use Google Slides, there is the case that I want to jump to the specific slide on the same Google Slides. And, I have the case that I want to jump from the last slide to the 1st slide. In those cases, I had manually added the slide page link to each shape. But when the number of slides are large, I thought that when a script for achieving this is prepared, it will be useful. So I created this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Script of Resumable Upload with Google Drive API for Axios</title>
      <link>https://tanaikech.github.io/2021/01/05/simple-script-of-resumable-upload-with-google-drive-api-for-axios/</link>
      <pubDate>Tue, 05 Jan 2021 21:18:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/01/05/simple-script-of-resumable-upload-with-google-drive-api-for-axios/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0e33b7a850e8c56d111ed0f32df0b485&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a simple sample script for achieving the resumable upload to Google Drive using Axios. In order to achieve the resumable upload, at first, it is required to retrieve the location, which is the endpoint of upload. The location is included in the response headers. After the location was retrieved, the file can be uploaded to the location URL.&lt;/p&gt;&#xA;&lt;p&gt;In this sample, a text data is uploaded with the resumable upload using a single chunk.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Downloading and Uploading File to Google Drive without Saving File with Stream and Resumable Upload using Node.js</title>
      <link>https://tanaikech.github.io/2021/01/05/downloading-and-uploading-file-to-google-drive-without-saving-file-with-stream-and-resumable-upload-using-node.js/</link>
      <pubDate>Tue, 05 Jan 2021 15:38:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2021/01/05/downloading-and-uploading-file-to-google-drive-without-saving-file-with-stream-and-resumable-upload-using-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/99187753ceb5fd55d343b52dcbe176a5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script of Node.js for downloading the data and uploading the data to Google Drive with the resumable upload without saving it as a file. The downloaded data is uploaded to Google Drive with the stream.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Before you use this, please set the variables of &lt;code&gt;accessToken&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;fileSize&lt;/code&gt;, &lt;code&gt;mimeType&lt;/code&gt; and &lt;code&gt;filename&lt;/code&gt;. In this case, &lt;code&gt;fileSize&lt;/code&gt; is required to set because the data is uploaded with the resumable upload.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Safe-Uploading for Google Drive by HTML in External Server using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/12/29/safe-uploading-for-google-drive-by-html-in-external-server-using-google-apps-script/</link>
      <pubDate>Tue, 29 Dec 2020 11:13:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/12/29/safe-uploading-for-google-drive-by-html-in-external-server-using-google-apps-script/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a report for safe-uploading files to Google Drive by HTML put in the external server using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When you want to make the user upload a file to your own Google Drive using the HTML put in the external server of Google side, when the file size is smaller than 50 MB, this can be achieved without using the access token. &lt;a href=&#34;https://tanaikech.github.io/2020/08/13/uploading-file-to-google-drive-from-external-html-without-authorization/&#34;&gt;Ref&lt;/a&gt; (When the HTML is put in the internal server of Google side, you can also use &lt;a href=&#34;https://tanaikech.github.io/2020/02/18/uploading-file-to-google-drive-using-html-and-google-apps-script/&#34;&gt;&lt;code&gt;google.script.run&lt;/code&gt;&lt;/a&gt;.) But, when the file size is over 50 MB, it is required to upload the file with the resumable upload. In this case, the access token is required to be used. In this case that the user uploads to your own Google Drive, when the access token is used in the upload, it is considered that this is the weak point of the security. In this report, I would like to propose the method for safe-uploading files to Google Drive by HTML put in the external server using Google Apps Script. Please think of this as one of several methods.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Javascript library - BatchRequest_js</title>
      <link>https://tanaikech.github.io/2020/12/22/javascript-library-batchrequest_js/</link>
      <pubDate>Tue, 22 Dec 2020 11:50:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/12/22/javascript-library-batchrequest_js/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a library for running Batch Requests for Google APIs using Javascript.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;description&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When users use Google&amp;rsquo;s APIs, one quota is used for one API call. When the batch request is used, several APIs can be called by one quota, although there are some limitations in the batch request.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;google-api-javascript-client&lt;/code&gt; can run the batch request. &lt;a href=&#34;https://github.com/google/google-api-javascript-client/blob/master/docs/batch.md&#34;&gt;Ref&lt;/a&gt; But, I created this for my self study. This library can achieve the batch request using &lt;code&gt;fetch&lt;/code&gt; without using &lt;code&gt;google-api-javascript-client&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Access Token for Service Account using Javascript</title>
      <link>https://tanaikech.github.io/2020/12/19/retrieving-access-token-for-service-account-using-javascript/</link>
      <pubDate>Sat, 19 Dec 2020 14:09:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/12/19/retrieving-access-token-for-service-account-using-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3c7f208cb352a807b3d30b9c1dcf0c82&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the access token for Service Account using Javascript. The flow for using this script is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;At first, please create the Service Account and retrieve JSON file.&lt;/li&gt;&#xA;&lt;li&gt;Put Scopes, &lt;code&gt;private_key&lt;/code&gt; and &lt;code&gt;client_email&lt;/code&gt; to the script.&lt;/li&gt;&#xA;&lt;li&gt;Run the script.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;In this script, 2 libraries of &lt;a href=&#34;https://github.com/travist/jsencrypt&#34;&gt;jsencrypt&lt;/a&gt; and &lt;a href=&#34;https://github.com/brix/crypto-js&#34;&gt;crypto-js&lt;/a&gt; are used.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/3.0.0-rc.1/jsencrypt.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sample&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;private_key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// private_key of JSON file retrieved by creating Service Account&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;client_email&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// client_email of JSON file retrieved by creating Service Account&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scopes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/auth/drive.readonly&amp;#34;&lt;/span&gt;]; &lt;span style=&#34;color:#75715e&#34;&gt;// Scopes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/oauth2/v4/token&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;alg&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RS256&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;typ&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JWT&amp;#34;&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt;(Date.&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;claim&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;iss&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;client_email&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;scope&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scopes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;aud&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;exp&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3600&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;iat&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;btoa&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;)) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;btoa&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;claim&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSEncrypt&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setPrivateKey&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;private_key&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;CryptoJS&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SHA256&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sha256&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;assertion&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;grant_type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;urn:ietf:params:oauth:grant-type:jwt-bearer&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;json&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .&lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;sample&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the access token retrieved at above is used for retrieving file list, the sample script is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Meet the Google Workspace Developer Experts</title>
      <link>https://tanaikech.github.io/2020/12/15/meet-the-google-workspace-developer-experts/</link>
      <pubDate>Tue, 15 Dec 2020 10:57:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/12/15/meet-the-google-workspace-developer-experts/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://developers.googleblog.com/2020/12/meet-google-workspace-developer-experts.html&#34;&gt;Original post&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Superheroes are well known for wearing capes, fighting villains and looking to save the world from evil. There also are superheroes that quietly choose to use their super powers to explain technology to new users, maintain community forums, write blog posts, speak at events, host video series, create demos, share sample code and more. All in the name of helping other developers become more successful by learning new skills, delivering better apps, and ultimately enhancing their careers. At Google, we refer to the latter category of superheroes as Google Developer Experts or “GDEs” for short.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - FilesApp</title>
      <link>https://tanaikech.github.io/2020/12/12/updated-gas-library-filesapp/</link>
      <pubDate>Sat, 12 Dec 2020 17:23:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/12/12/updated-gas-library-filesapp/</guid>
      <description>&lt;p&gt;FilesApp was updated to v1.1.3.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.3 (December 12, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Access token got to be able to be given as an argument. When the access token is not given as the argument, &lt;code&gt;ScriptApp.getOAuthToken()&lt;/code&gt; is used as the default access token. By this, the service account can be used.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/FilesApp&#34;&gt;GitHub of FilesApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>New IDE for Google Apps Script has been finally released</title>
      <link>https://tanaikech.github.io/2020/12/08/new-ide-for-google-apps-script-has-been-finally-released/</link>
      <pubDate>Tue, 08 Dec 2020 12:15:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/12/08/new-ide-for-google-apps-script-has-been-finally-released/</guid>
      <description>&lt;p&gt;New IDE for Google Apps Script has finally been released at December 7, 2020. &lt;a href=&#34;https://developers.google.com/apps-script/releases/#december_7_2020&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20201208a-fig1.png&#34;&#xA;     alt=&#34;New IDE for Google Apps Script has been finally released&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I think that the speed for displaying the log is faster than old one, and the code completion also got to be easy to see.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Image Files to Google Photos using axios</title>
      <link>https://tanaikech.github.io/2020/12/07/uploading-image-files-to-google-photos-using-axios/</link>
      <pubDate>Mon, 07 Dec 2020 10:38:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/12/07/uploading-image-files-to-google-photos-using-axios/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/426345c24e46da3ac7268f31b76bb3e4&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for uploading the image files to the specific album in Google Photos using axios.&lt;/p&gt;&#xA;&lt;p&gt;Before you use this script, please retrieve the access token for uploading the files using Google Photos API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;In this sample script, several image files can be uploaded.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;files&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;multiple&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onclick&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;main()&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;upload&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;upload&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;albumId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt; }) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;description&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Date().&lt;span style=&#34;color:#a6e22e&#34;&gt;toISOString&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;promises&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Promise((&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;axios&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          .&lt;span style=&#34;color:#a6e22e&#34;&gt;post&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://photoslibrary.googleapis.com/v1/uploads&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/octet-stream&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X-Goog-Upload-File-Name&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X-Goog-Upload-Protocol&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;raw&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#a6e22e&#34;&gt;Authorization&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Bearer &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          .&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;(({ &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; }) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#a6e22e&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;description&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#a6e22e&#34;&gt;simpleMediaItem&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;fileName&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;uploadToken&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; Promise.&lt;span style=&#34;color:#a6e22e&#34;&gt;all&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;promises&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Promise((&lt;span style=&#34;color:#a6e22e&#34;&gt;resolve&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;reject&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;axios&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          .&lt;span style=&#34;color:#a6e22e&#34;&gt;post&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;albumId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;albumId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;newMediaItems&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; }),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-type&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;Authorization&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Bearer &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          .&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;resolve&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          .&lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;reject&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// This function is run.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;files&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;albumId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the album ID.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// Please set your access token.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;upload&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .&lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/photos&#34;&gt;Google Photos APIs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/photos/library/guides/upload-media&#34;&gt;Upload media&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/photos/library/reference/rest/v1/mediaItems/batchCreate&#34;&gt;Method: mediaItems.batchCreate&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Related question in Stackoverflow.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/q/65171851&#34;&gt;Error in newMediaItemResults in Google Photos API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Achieving Search of Files by &#39;is:unorganized owner:me&#39; using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/12/06/achieving-search-of-files-by-isunorganized-ownerme-using-google-apps-script/</link>
      <pubDate>Sun, 06 Dec 2020 15:52:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/12/06/achieving-search-of-files-by-isunorganized-ownerme-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ec6aa9f2967d2f837df7c87276a0c168&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for achieving the search of files by &lt;code&gt;is:unorganized owner:me&lt;/code&gt; using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In the current stage, unfortunately, the files cannot be directly retrieved by searching &lt;code&gt;is:unorganized owner:me&lt;/code&gt; with Drive API and Drive service. So as the current workaround, all files are retrieved using the method of &amp;ldquo;Files: list&amp;rdquo; of Drive API with &lt;code&gt;&#39;me&#39; in owners and trashed = false&lt;/code&gt;, and the file list is retrieved from all file list using a script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sample Scripts for Creating New Event with Google Meet Link to Google Calendar using Various Languages</title>
      <link>https://tanaikech.github.io/2020/12/03/sample-scripts-for-creating-new-event-with-google-meet-link-to-google-calendar-using-various-languages/</link>
      <pubDate>Thu, 03 Dec 2020 16:04:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/12/03/sample-scripts-for-creating-new-event-with-google-meet-link-to-google-calendar-using-various-languages/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/94791d48823e9659aa376cf7f0161d9b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the sample scripts for creating new event with Google Meet link to Google Calendar using various languages. When I saw &lt;a href=&#34;https://developers.google.com/calendar/create-events#conferencing&#34;&gt;the official document&lt;/a&gt; of &amp;ldquo;Add video and phone conferences to events&amp;rdquo;, in the current stage, I can see only the sample script for Javascript. But I saw the several questions related to this for various languages. So I published the sample scripts for creating new event with Google Meet link to Google Calendar using various languages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Downloading Active Sheet in Google Spreadsheet as CSV and PDF file by Clicking Button</title>
      <link>https://tanaikech.github.io/2020/11/23/downloading-active-sheet-in-google-spreadsheet-as-csv-and-pdf-file-by-clicking-button/</link>
      <pubDate>Mon, 23 Nov 2020 14:10:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/11/23/downloading-active-sheet-in-google-spreadsheet-as-csv-and-pdf-file-by-clicking-button/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/114dad7d31dde402b4892787e9cceaad&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for downloading the active sheet in Google Spreadsheet to the local PC as a CSV file and a PDF file when a button on the side bar and the dialog is clicked. This is created with Google Apps Script and HTML&amp;amp;Javascript. In this post, the script of &lt;a href=&#34;https://tanaikech.github.io/2020/11/10/downloading-google-spreadsheet-as-xlsx-and-pdf-file-by-clicking-button/&#34;&gt;the previous post&lt;/a&gt; was modified.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20201123a-fig1.gif&#34;&#xA;     alt=&#34;Downloading Active Sheet in Google Spreadsheet as CSV and PDF file by Clicking Button&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Texts to Bold, Italic and Bold-Italic Types of Unicode using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/11/13/converting-texts-to-bold-italic-and-bold-italic-types-of-unicode-using-google-apps-script/</link>
      <pubDate>Fri, 13 Nov 2020 13:39:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/11/13/converting-texts-to-bold-italic-and-bold-italic-types-of-unicode-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/39797ccd1b9280f967fe62b3328d782a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting the texts to the bold, italic, bold-italic types, underline and strike through of the unicode using Google Apps Script. In the current stage, at Google Docs (Spreadsheet, Document, Slides and so on), the rich texts cannot be directly managed for all places using Google Apps Script. But there are the places which can use the bold, italic and bold-italic fonts with the unicode. This sample script uses this. When this sample script is used, for example, the bold, italic and bold-italic texts can be put using &lt;code&gt;SpreadsheetApp.getUi().alert(convertedText)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing Multiple Values in Google Spreadsheet with Low Process Cost using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/11/13/replacing-multiple-values-in-google-spreadsheet-with-low-process-cost-using-google-apps-script/</link>
      <pubDate>Fri, 13 Nov 2020 08:06:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/11/13/replacing-multiple-values-in-google-spreadsheet-with-low-process-cost-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3030603299d1e302821611c834420258&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for replacing the multiple values with various values in Google Spreadsheet with the low process cost using Google Apps Script. In this script, the batchUpdate method of Sheets API is used. So the request can be done by one API call. When &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet&#34;&gt;Spreadsheet services&lt;/a&gt; is used for this situation, the values are retrieved from the sheet and replaced the retrieved values, and then, the updated values are put to the sheet. Or the TextFinder is used in a loop. In this case, the process cost is higher than that using Sheets API. By using the bathUpdate method of Sheets API, the process cost is reduced.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Measuring Process Costs for Formulas in Cells on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/11/11/benchmark-measuring-process-costs-for-formulas-in-cells-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 11 Nov 2020 14:20:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/11/11/benchmark-measuring-process-costs-for-formulas-in-cells-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b00be25a02ec283689480ac8138cbfeb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When Google Spreadsheet is used, there is the case that the built-in functions and the custom functions in the cells are used. For the functions of Google Apps Script, there is the method for measuring the process cost. &lt;a href=&#34;https://github.com/tanaikech/taking-advantage-of-google-apps-script#benchmarks&#34;&gt;Ref&lt;/a&gt; But for the built-in functions, it is required to create the script for it. In this report, the script for measuring a function put in a cell has been proposed, and the process cost of the built-in functions has been measured. The proposed script can measure the process cost for the built-in functions and custom functions on Google Spreadsheet. The script is created with using Google Apps Script. When the process cost can be known for the built-in functions and custom functions, it is considered that it will be useful for the developers using Google Spreadsheet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Downloading Google Spreadsheet as XLSX and PDF file by Clicking Button</title>
      <link>https://tanaikech.github.io/2020/11/10/downloading-google-spreadsheet-as-xlsx-and-pdf-file-by-clicking-button/</link>
      <pubDate>Tue, 10 Nov 2020 14:47:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/11/10/downloading-google-spreadsheet-as-xlsx-and-pdf-file-by-clicking-button/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/61dea338dfba386f87c592d4ee6c68af&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for downloading Google Spreadsheet to the local PC as a XLSX file and a PDF file when a button on the side bar and the dialog is clicked. This is created with Google Apps Script and HTML&amp;amp;Javascript.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20201110a-img.gif&#34;&#xA;     alt=&#34;Downloading Google Spreadsheet as XLSX and PDF file by Clicking Button&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please create new Google Spreadsheet and copy and paste the following scripts to the script editor. And please run &lt;code&gt;openSidebar()&lt;/code&gt;. By this, the side bar is opened to the Spreadsheet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>User Runs Script for Range Protected by Owner using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/11/05/user-runs-script-for-range-protected-by-owner-using-google-apps-script/</link>
      <pubDate>Thu, 05 Nov 2020 11:57:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/11/05/user-runs-script-for-range-protected-by-owner-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5ebf492b53de40fe254dba63c8520391&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is a situation that it wants to make users run a script for the range protected by the owner using Google Apps Script. This is a sample script that an user runs a script for the range protected by the owner using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20201105a-img.gif&#34;&#xA;     alt=&#34;User Runs Script for Range Protected by Owner using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This demonstration shows the following situations.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Spreadsheet is shared with an user.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Process Costs for Retrieving Values from Arrays for Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/10/23/benchmark-process-costs-for-retrieving-values-from-arrays-for-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 23 Oct 2020 16:37:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/23/benchmark-process-costs-for-retrieving-values-from-arrays-for-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6333d797149ab9d69382d1b368f96e80&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Here, I would like to report the process costs for retrieving the values from the arrays for Spreadsheet using Google Apps Script (GAS). When Spreadsheet is used with Google Apps Script, we have the following situations.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Retrieve values from the multiple rows in a column.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Retrieve values from the multiple columns in a row.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;When the values are retrieved from above situations, it is required to retrieve the values from 1 dimensional array in the 2 dimensional array. In this report, the process costs for retrieving the values from the 2 dimensional array of above situations have been measured.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Multiple Buttons on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/10/21/creating-multiple-buttons-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 21 Oct 2020 11:37:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/21/creating-multiple-buttons-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/17d48dbcf4c1a39663424cae658e50cb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating the multiple buttons on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I have got several contacts about this. I thought that when this is published, it might be useful for other users. So I published this sample script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20201021a-fig1.gif&#34;&#xA;     alt=&#34;Creating Multiple Buttons on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of the container-bound script of Google Spreadsheet. And, please set the variables and run the function &lt;code&gt;createButtons&lt;/code&gt;. By this, the buttons are created to the cells.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Request of multipart/form-data with Simple Request Body using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/10/17/request-of-multipart/form-data-with-simple-request-body-using-google-apps-script/</link>
      <pubDate>Sat, 17 Oct 2020 11:00:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/17/request-of-multipart/form-data-with-simple-request-body-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5cd0dc9ea7d75e4a2ff65049ed3d78c3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script of the request of &lt;code&gt;multipart/form-data&lt;/code&gt; with a simple request body using Google Apps Script. I hope that the users will easy to use Class UrlFetchApp by this report.&lt;/p&gt;&#xA;&lt;p&gt;This report is the updated post of &amp;ldquo;&lt;a href=&#34;https://tanaikech.github.io/2017/07/21/multipart-post-request-using-google-apps-script/&#34;&gt;Multipart-POST Request Using Google Apps Script&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;I had already reported about this at &lt;a href=&#34;https://tanaikech.github.io/2017/07/21/multipart-post-request-using-google-apps-script/&#34;&gt;this report&lt;/a&gt;. In that case, it was required to create a bit complicated request body to request &lt;code&gt;multipart/form-data&lt;/code&gt;. Today, by &lt;a href=&#34;https://stackoverflow.com/questions/64382781/api-post-request-in-google-app-script-not-working/64382970?noredirect=1#comment113873694_64382970&#34;&gt;a comment&lt;/a&gt;, I could notice the sample script of Class UrlFetchApp in the official document had been updated. By this, I thought that &lt;code&gt;multipart/form-data&lt;/code&gt; will be requested with a simple request body. In this report, I would like to introduce a sample script for requesting &lt;code&gt;multipart/form-data&lt;/code&gt; with a simple request body. But I&amp;rsquo;m not sure whether this request got to be able to be done by the internal update of Class UrlFetchApp.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving All Values from All Sheets from URL of 2PACX- of Web Published Google Spreadsheet using Python</title>
      <link>https://tanaikech.github.io/2020/10/13/retrieving-all-values-from-all-sheets-from-url-of-2pacx-of-web-published-google-spreadsheet-using-python/</link>
      <pubDate>Tue, 13 Oct 2020 14:59:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/13/retrieving-all-values-from-all-sheets-from-url-of-2pacx-of-web-published-google-spreadsheet-using-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/51628e5e0a2c017329457afdb1936912&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving all values from all sheets from URL of 2PACX- of Web Published Google Spreadsheet using Python.&lt;/p&gt;&#xA;&lt;p&gt;In this post, it supposes that the Google Spreadsheet has already been published for Web. &lt;a href=&#34;https://support.google.com/docs/answer/183965?co=GENIE.Platform%3DDesktop&amp;amp;hl=en&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;flow&#34;&gt;Flow&lt;/h2&gt;&#xA;&lt;p&gt;The flow of this method is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Retrieve XLSX data from the URL of web published Google Spreadsheet as &lt;code&gt;BytesIO&lt;/code&gt; data.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The URL is like &lt;code&gt;https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;XLSX data is parsed with openpyxl.&lt;/li&gt;&#xA;&lt;li&gt;Retrieve all values from all sheets.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please set &lt;code&gt;spreadsheetUrl&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inserting Text on Image using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/10/13/inserting-text-on-image-using-google-apps-script/</link>
      <pubDate>Tue, 13 Oct 2020 08:23:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/13/inserting-text-on-image-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/835642df109731a559e52d831bd3342d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for inserting a text on an image using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20201013a-fig1.gif&#34;&#xA;     alt=&#34;Inserting Text on Image using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this demonstration, &amp;ldquo;sample text&amp;rdquo; is inserted to the image. The image is from &lt;a href=&#34;https://www.deviantart.com/k3-studio/art/Rainbow-painting-281090729&#34;&gt;https://www.deviantart.com/k3-studio/art/Rainbow-painting-281090729&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;preparation&#34;&gt;Preparation&lt;/h2&gt;&#xA;&lt;p&gt;When you use this script, please install the following 2 Google Apps Script libraries.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp&#34;&gt;DocsServiceApp&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;ImgApp&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;And, &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services&#34;&gt;please enable Slides API at Advanced Google services&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;flow&#34;&gt;Flow&lt;/h2&gt;&#xA;&lt;p&gt;The flow of this sample script is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving All Values from All Sheets from URL of 2PACX- of Web Published Google Spreadsheet using Node.js</title>
      <link>https://tanaikech.github.io/2020/10/12/retrieving-all-values-from-all-sheets-from-url-of-2pacx-of-web-published-google-spreadsheet-using-node.js/</link>
      <pubDate>Mon, 12 Oct 2020 14:23:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/12/retrieving-all-values-from-all-sheets-from-url-of-2pacx-of-web-published-google-spreadsheet-using-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/49e1e6515225d810e849b3487142a90d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving all values from all sheets from URL of 2PACX- of Web Published Google Spreadsheet using Node.js.&lt;/p&gt;&#xA;&lt;p&gt;In this post, it supposes that the Google Spreadsheet has already been published for Web. &lt;a href=&#34;https://support.google.com/docs/answer/183965?co=GENIE.Platform%3DDesktop&amp;amp;hl=en&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Before you use this sample script, please install &lt;a href=&#34;https://www.npmjs.com/package/xlsx&#34;&gt;SheetJS js-xlsx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;flow&#34;&gt;Flow&lt;/h2&gt;&#xA;&lt;p&gt;The flow of this method is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Retrieve XLSX data from the URL of web published Google Spreadsheet as the buffer data.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The URL is like &lt;code&gt;https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;XLSX data is parsed with &lt;a href=&#34;https://www.npmjs.com/package/xlsx&#34;&gt;SheetJS js-xlsx&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Retrieve all values from all sheets.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please set &lt;code&gt;spreadsheetUrl&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving All Values from All Sheets from URL of 2PACX- of Web Published Google Spreadsheet using Google Apps Script and Javascript</title>
      <link>https://tanaikech.github.io/2020/10/12/retrieving-all-values-from-all-sheets-from-url-of-2pacx-of-web-published-google-spreadsheet-using-google-apps-script-and-javascript/</link>
      <pubDate>Mon, 12 Oct 2020 13:42:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/12/retrieving-all-values-from-all-sheets-from-url-of-2pacx-of-web-published-google-spreadsheet-using-google-apps-script-and-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1876f19638e329253cf352225bd180cd&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving all values from all sheets from URL of 2PACX- of Web Published Google Spreadsheet using Google Apps Script and Javascript.&lt;/p&gt;&#xA;&lt;p&gt;In this post, it supposes that the Google Spreadsheet has already been published for Web. &lt;a href=&#34;https://support.google.com/docs/answer/183965?co=GENIE.Platform%3DDesktop&amp;amp;hl=en&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;flow&#34;&gt;Flow&lt;/h2&gt;&#xA;&lt;p&gt;The flow of this method is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From the client side, send the URL of web published Google Spreadsheet to the Web Apps created by Google Apps Script.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The URL is like &lt;code&gt;https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Return the byte array of XLSX data from the Web Apps to the client side.&lt;/li&gt;&#xA;&lt;li&gt;At the client side, the XLSX data is parsed with &lt;a href=&#34;https://github.com/SheetJS/sheetjs&#34;&gt;SheetJS js-xlsx&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Retrieve all values from all sheets.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-prepare-script&#34;&gt;1. Prepare script.&lt;/h3&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor and save it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sorting Cells on Google Spreadsheet with Background colors using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/10/09/sorting-cells-on-google-spreadsheet-with-background-colors-using-google-apps-script/</link>
      <pubDate>Fri, 09 Oct 2020 12:46:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/09/sorting-cells-on-google-spreadsheet-with-background-colors-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8e531fdb4125c843b58cf7bef6165786&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for sorting the cells on Google Spreadsheet with the background colors using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, it seems that &lt;code&gt;sort(sortSpecObj)&lt;/code&gt; of Class Range cannot directly sort by the background colors of cells. But when Sheets API is used, this goal can be achieved. Here, &amp;ldquo;SortRangeRequest&amp;rdquo; of the method of &amp;ldquo;spreadsheets.batchUpdate&amp;rdquo; in Sheets API is used.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20201009a-fig1.png&#34;&#xA;     alt=&#34;Sorting Cells on Google Spreadsheet with Background colors using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Statistical Analysis of Duplicated Questions for google-apps-script tag in Stackoverflow</title>
      <link>https://tanaikech.github.io/2020/10/07/statistical-analysis-of-duplicated-questions-for-google-apps-script-tag-in-stackoverflow/</link>
      <pubDate>Wed, 07 Oct 2020 13:51:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/07/statistical-analysis-of-duplicated-questions-for-google-apps-script-tag-in-stackoverflow/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fa8e7002678a377748ae35a33fa5b6eb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At Stackoverflow, a lot of people post the questions and answer to the questions every day. By this, there are a lot of important information in Stackoverflow. I have already reported &amp;ldquo;Trend of google-apps-script Tag on Stackoverflow&amp;rdquo; using the data retrieved from Stackoverflow. &lt;a href=&#34;#references&#34;&gt;Ref. 1&lt;/a&gt; It is found that the important statistical result can be obtained by analyzing the data on Stackoverflow. In this report, I would like to introduce the statistical analysis of duplicated questions for the &lt;code&gt;google-apps-script&lt;/code&gt; tag in Stackoverflow. When the duplicated question is analyzed, it is considered that the important issues for users can be known. As the result, it was found that there are the trend that the duplicated questions related to Javascript, Google Spreadsheet , the process cost and the cooperation with HTML and Javascript are posted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting Alternate Background Colors for Rows in Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/10/06/setting-alternate-background-colors-for-rows-in-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Tue, 06 Oct 2020 13:39:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/06/setting-alternate-background-colors-for-rows-in-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/89aaa3adcd3a1fc37187ca61f389cbe9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for setting alternate background colors for rows in Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;It has already been known when the conditional formatting rule and custom function are used, this can be simply achieved. &lt;a href=&#34;https://stackoverflow.com/q/30268451&#34;&gt;Ref&lt;/a&gt; In this report, I would like to introduce the method for using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20201006a-fig1.png&#34;&#xA;     alt=&#34;Setting Alternate Background Colors for Rows in Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;In this sample script, the values of column &amp;ldquo;A&amp;rdquo; are checked.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Specific Function When Specific Sheet is Edited on Google Spreadsheet</title>
      <link>https://tanaikech.github.io/2020/10/04/running-specific-function-when-specific-sheet-is-edited-on-google-spreadsheet/</link>
      <pubDate>Sun, 04 Oct 2020 09:23:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/10/04/running-specific-function-when-specific-sheet-is-edited-on-google-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bc09d1e03a0ebed3af894a6ed61cf12d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample Google Apps Script for running the specific function when the specific sheet is edited.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the container-bound script of Spreadsheet and set &lt;code&gt;sheets&lt;/code&gt; object.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// When the cells are edited, this function is run by the fire of event trigger.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onEdit&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the sheet name and function as follows.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Sheet1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;functionForSheet1&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// Sheet1 is the sheet name. functionForSheet1 is the function name of function which is run when Sheet1 is edited.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Sheet2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;functionForSheet2&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetName&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetName&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetName&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// In this sample, when Sheet1 is edited, this function is run.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;functionForSheet1&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1 was edited.&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// do something&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// In this sample, when Sheet2 is edited, this function is run.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;functionForSheet2&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet2 was edited.&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// do something&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;In this sample script, when the cells of &amp;ldquo;Sheet1&amp;rdquo; and &amp;ldquo;Sheet2&amp;rdquo; are edited, &lt;code&gt;functionForSheet1()&lt;/code&gt; and &lt;code&gt;functionForSheet2()&lt;/code&gt; are run, respectively. When other sheets are edited, no functions are run.&lt;/li&gt;&#xA;&lt;li&gt;In this sample script, &lt;code&gt;onEdit&lt;/code&gt; of the simple trigger is used. When the functions you want to run include the methods which are required to authorize, please use the installable trigger.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This method can be also used for other event triggers like OnChange, OnSelectionChange and so son.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers&#34;&gt;Simple Triggers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers/installable&#34;&gt;Installable Triggers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers/events&#34;&gt;Event Objects&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Benchmark: Process Costs for Searching Values in Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/09/30/benchmark-process-costs-for-searching-values-in-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 30 Sep 2020 11:42:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/09/30/benchmark-process-costs-for-searching-values-in-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0a6f03970b471ffa286f1dac0b79359e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Here, I would like to report the process costs for searching values in Spreadsheet using Google Apps Script (GAS). When the values are searched in Google Spreadsheet, the following 3 patterns can be considered. &lt;a href=&#34;https://stackoverflow.com/a/56663884&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Retrieve all values using &lt;code&gt;getValues&lt;/code&gt;, and the values are searched from the retrieved array.&lt;/li&gt;&#xA;&lt;li&gt;Use TextFinder.&lt;/li&gt;&#xA;&lt;li&gt;Use Query language.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In these cases, it has already been found that the lowest process cost is to use the Query language. And about finding values from an array, I have already been reported as &amp;ldquo;&lt;a href=&#34;https://gist.github.com/tanaikech/eda9234822b5dec80549216a43c52652&#34;&gt;Benchmark: Search for Array Processing using Google Apps Script&lt;/a&gt;&amp;rdquo;. But I had never summarized the process costs for TextFinder and find values from an array. So in this report, I would like to introduce this. As the result, the importance of TextFinder for retrieving the row numbers and the row values by searching a value could be understand.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Spreadsheet with Custom Header and Footer using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/09/25/creating-spreadsheet-with-custom-header-and-footer-using-google-apps-script/</link>
      <pubDate>Fri, 25 Sep 2020 09:52:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/09/25/creating-spreadsheet-with-custom-header-and-footer-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0430c7a8cf28508aa3cb80c22136f7f9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In order to print and export as PDF file, this is a sample script for converting Spreadsheet to Spreadsheet which has the custom header and footer.&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp&#34;&gt;DocsServiceApp&lt;/a&gt;, which is Google Apps Script library, is used. And, in this case, &lt;strong&gt;the Spreadsheet with the custom header and footer is created as new Spreadsheet.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Before you use this script, please install &lt;a href=&#34;https://github.com/tanaikech/DocsServiceApp&#34;&gt;DocsServiceApp&lt;/a&gt; and &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services&#34;&gt;enable Drive API at Advanced Google services&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ImgApp</title>
      <link>https://tanaikech.github.io/2020/09/24/updated-gas-library-imgapp/</link>
      <pubDate>Thu, 24 Sep 2020 14:41:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/09/24/updated-gas-library-imgapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;ImgApp&lt;/a&gt; was updated to v1.3.0.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/ImgApp/raw/master/images/demo4.gif&#34;&#xA;     alt=&#34;Updated: GAS Library - ImgApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.3.0 (September 24, 2020)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added new method. Added &lt;a href=&#34;https://github.com/tanaikech/ImgApp#4-editimage&#34;&gt;editImage()&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;This method is for editing images. In the current stage, the image can be cropped. And several images can be merged as an image.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;https://github.com/tanaikech/ImgApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - DocsServiceApp</title>
      <link>https://tanaikech.github.io/2020/09/24/gas-library-docsserviceapp/</link>
      <pubDate>Thu, 24 Sep 2020 14:39:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/09/24/gas-library-docsserviceapp/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a Google Apps Script library for supporting Document service, Docs API, Spreadsheet service, Sheets API, Slides service and Slides API.&lt;/strong&gt; The aim of this library is to compensate the processes that they services cannot achieve.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/DocsServiceApp/raw/master/images/demo1.png&#34;&#xA;     alt=&#34;GAS Library - DocsServiceApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;The Google services, which are Document service, Docs API, Spreadsheet service, Sheets API, Slides service and Slides API, are growing now. But, unfortunately, there are still the processes that they cannot done. I created this GAS library for supporting the Google services.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - FetchApp</title>
      <link>https://tanaikech.github.io/2020/09/19/updated-gas-library-fetchapp/</link>
      <pubDate>Sat, 19 Sep 2020 13:11:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/09/19/updated-gas-library-fetchapp/</guid>
      <description>&lt;h3 id=&#34;fetchapp-was-updated-to-v102&#34;&gt;FetchApp was updated to v1.0.2.&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (September 19, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From this version, when a blob is sent, the blob is sent to &lt;code&gt;files&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/FetchApp&#34;&gt;https://github.com/tanaikech/FetchApp&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving All URLs in Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/09/14/retrieving-all-urls-in-google-document-using-google-apps-script/</link>
      <pubDate>Mon, 14 Sep 2020 10:57:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/09/14/retrieving-all-urls-in-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d3ce0c2186885ee27d23e02ddd2696b7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving All URLs in Google Document using Google Apps Script. In this sample script, the method of &amp;ldquo;documents.get&amp;rdquo; in Google Docs API is used. By this, the URL can be retrieve using &lt;code&gt;JSON.parse()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Before you use this script, &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services&#34;&gt;please enable Google Docs API at Advanced Google Services&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;documentId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the Google Document ID.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Docs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Documents&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;documentId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;urls&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;), (&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;urls&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;urls&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced&#34;&gt;Advanced Google Services&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/docs/api/reference/rest/v1/documents/get&#34;&gt;Method: documents.get&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Using Values Submitted from HTML Form using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/09/04/using-values-submitted-from-html-form-using-google-apps-script/</link>
      <pubDate>Fri, 04 Sep 2020 14:58:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/09/04/using-values-submitted-from-html-form-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/58d96c023468fc1922d67764251b25e0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for using the values submitted from the HTML form using Google Apps Script and Javascript. In this case, the values include the files.&lt;/p&gt;&#xA;&lt;h2 id=&#34;issue&#34;&gt;Issue&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Text: &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sampleText1&amp;#34;&lt;/span&gt; /&amp;gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;br&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Single file: &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sampleFile1&amp;#34;&lt;/span&gt; /&amp;gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;br&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;onclick&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;main(this.parentNode)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;google&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sample&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is a simple sample script for sending the values of form to Google Apps Script. In this case, texts and file are sent. When the button is clicked, &lt;code&gt;main()&lt;/code&gt; is run. In this case, &lt;code&gt;this.parentNode&lt;/code&gt; is sent to &lt;code&gt;google.script.run.sample(this.parentNode)&lt;/code&gt;. At that time, at Google Apps Script side, the text value can be correctly retrieved. But the file cannot be correctly sent. When the file is created as a file on Google Drive, the file is broken. I think that the reason of this issue might be due to character code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Range in Google Spreadsheet as Image using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/08/19/converting-range-in-google-spreadsheet-as-image-using-google-apps-script/</link>
      <pubDate>Wed, 19 Aug 2020 14:25:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/08/19/converting-range-in-google-spreadsheet-as-image-using-google-apps-script/</guid>
      <description>&lt;h2 id=&#34;another-approach&#34;&gt;Another approach&lt;/h2&gt;&#xA;&lt;p&gt;10 Aug 2022: &lt;a href=&#34;https://tanaikech.github.io/2022/08/10/report-challenging-exporting-selected-cells-on-spreadsheet-as-image-using-google-apps-script-and-javascript/&#34;&gt;Report: Challenging Exporting Selected Cells on Spreadsheet as Image using Google Apps Script and Javascript&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;old-approach&#34;&gt;Old approach&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6ec4f2278510311ea06b838c69828692&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting a range in Google Spreadsheet as an image data using Google Apps Script. Unfortunately, there are no methods for directly converting the range in Google Spreadsheet as an image data in the built-in functions. So in this case, as a workaround, &lt;a href=&#34;https://developers.google.com/apps-script/reference/charts&#34;&gt;Charts Service&lt;/a&gt; is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modifying 1st-Page Header in Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/08/19/modifying-1st-page-header-in-google-document-using-google-apps-script/</link>
      <pubDate>Wed, 19 Aug 2020 13:42:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/08/19/modifying-1st-page-header-in-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d430543089cc687e5d9c2bc96d3178ff&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are sample scripts for modifying the 1st-page header in Google Document using Google Apps Script. Unfortunately, in the current stage, the 1st-page header cannot be modified by Document service. In this case, it is required to use Google Docs API. Here, I would like to introduce 2 sample scripts for modifying the 1st page header using Docs API.&lt;/p&gt;&#xA;&lt;p&gt;When you use this, &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services&#34;&gt;please enable Google Docs API at Advanced Google services&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading File to Google Drive from External HTML without Authorization</title>
      <link>https://tanaikech.github.io/2020/08/13/uploading-file-to-google-drive-from-external-html-without-authorization/</link>
      <pubDate>Thu, 13 Aug 2020 15:27:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/08/13/uploading-file-to-google-drive-from-external-html-without-authorization/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d3e62002e522f9e3f2b35bc56c64b2c9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for uploading a file to Google Drive from the external HTML without the authorization. In this case, the client side can be used at the outside of Google. And as the server side, the Web Apps created by Google Apps Script is used.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;Please do the following flow.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-create-new-project-of-google-apps-script&#34;&gt;1. Create new project of Google Apps Script.&lt;/h3&gt;&#xA;&lt;p&gt;Sample script of Web Apps is a Google Apps Script. So please create a project of Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: python library - getfilelistpy</title>
      <link>https://tanaikech.github.io/2020/08/11/updated-python-library-getfilelistpy/</link>
      <pubDate>Tue, 11 Aug 2020 11:19:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/08/11/updated-python-library-getfilelistpy/</guid>
      <description>&lt;h2 id=&#34;python-library---getfilelistpy-was-updated-to-v107&#34;&gt;python library - getfilelistpy was updated to v1.0.7.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.7 (August 11, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/getfilelistpy/pull/4&#34;&gt;Pull request&lt;/a&gt; was reflected.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check getfilelistpy at &lt;a href=&#34;https://github.com/tanaikech/getfilelistpy&#34;&gt;https://github.com/tanaikech/getfilelistpy&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can also check getfilelistpy at &lt;a href=&#34;https://pypi.org/project/getfilelistpy/&#34;&gt;https://pypi.org/project/getfilelistpy/&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decoding QR code on Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/08/07/decoding-qr-code-on-google-slides-using-google-apps-script/</link>
      <pubDate>Fri, 07 Aug 2020 17:07:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/08/07/decoding-qr-code-on-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4fc0b33493d375e589d61312d2f028b7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for decoding a QR code put in Google Slides using Google Apps Script. In this case, Javascript is used at the opened dialog. And &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API&#34;&gt;Canvas API&lt;/a&gt; and &lt;a href=&#34;https://github.com/cozmo/jsQR&#34;&gt;jsQR&lt;/a&gt; are used. So unfortunately, this method cannot be used with the time-driven trigger and the Google Apps Script project of the standalone type.&lt;/p&gt;&#xA;&lt;p&gt;Of course, this method can be also used for Google Document and Google Spreadsheet. But at Google Spreadsheet, I recommend to retrieve the image of QR code with the fetch method from URL.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cropping Images in Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/08/06/cropping-images-in-google-slides-using-google-apps-script/</link>
      <pubDate>Thu, 06 Aug 2020 14:18:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/08/06/cropping-images-in-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a86781b425fe3f14edd5058ca8d46fe7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for cropping images in the Google Slides using Google Apps Script. In the current stage, in order to crop the images in Google Slides, it is required to use &lt;a href=&#34;https://developers.google.com/apps-script/reference/slides/image#replaceblobsource,-crop&#34;&gt;&lt;code&gt;replace(blobSource, crop)&lt;/code&gt;&lt;/a&gt; Because, although there is the &amp;ldquo;cropProperties&amp;rdquo; of &amp;ldquo;UpdateImagePropertiesRequest&amp;rdquo; in Slides API, unfortunately, in the current stage, this cannot be still used. This has already been reported. &lt;a href=&#34;https://issuetracker.google.com/issues/113978819&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;About cropping using &lt;code&gt;replace(blobSource, crop)&lt;/code&gt;, I thought that how to use might be a bit difficult. So here, I would like to introduce a sample script for using &lt;code&gt;replace(blobSource, crop)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>IMPORTANT: reduceRight with and without v8 runtime for Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/08/03/important-reduceright-with-and-without-v8-runtime-for-google-apps-script/</link>
      <pubDate>Mon, 03 Aug 2020 14:25:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/08/03/important-reduceright-with-and-without-v8-runtime-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7f13f4297d7307a47ad78f0254ce3353&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is an important point for using &lt;code&gt;reduceRignt&lt;/code&gt; with and without v8 runtime for Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;array&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e&amp;#34;&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;array&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reduceRight&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }, []);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;result&#34;&gt;Result&lt;/h2&gt;&#xA;&lt;h3 id=&#34;with-v8&#34;&gt;With V8&lt;/h3&gt;&#xA;&lt;p&gt;When V8 runtime is used, the following result is obtained.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[[&amp;#34;e&amp;#34;,4],[&amp;#34;d&amp;#34;,3],[&amp;#34;c&amp;#34;,2],[&amp;#34;b&amp;#34;,1],[&amp;#34;a&amp;#34;,0]]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;without-v8&#34;&gt;Without V8&lt;/h3&gt;&#xA;&lt;p&gt;When V8 runtime is NOT used, the following result is obtained.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[[&amp;#34;e&amp;#34;,0],[&amp;#34;d&amp;#34;,1],[&amp;#34;c&amp;#34;,2],[&amp;#34;b&amp;#34;,3],[&amp;#34;a&amp;#34;,4]]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;When above results are compared, it is found that the indexes are different. The indexes of &amp;ldquo;With V8&amp;rdquo; is in the opposite direction to that of &amp;ldquo;Without V8&amp;rdquo;. Please be careful this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - DownloadLargeFilesByUrl</title>
      <link>https://tanaikech.github.io/2020/08/01/updated-gas-library-downloadlargefilesbyurl/</link>
      <pubDate>Sat, 01 Aug 2020 17:24:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/08/01/updated-gas-library-downloadlargefilesbyurl/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (August 1, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When the file size less than the default chunk is downloaded, an error occurred. This bug was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/DownloadLargeFilesByUrl&#34;&gt;https://github.com/tanaikech/DownloadLargeFilesByUrl&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - GASProjectApp</title>
      <link>https://tanaikech.github.io/2020/07/31/gas-library-gasprojectapp/</link>
      <pubDate>Fri, 31 Jul 2020 16:22:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/31/gas-library-gasprojectapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a Google Apps Script library for creating, updating and exporting Google Apps Script project of the standalone type using Drive API. In this case, Apps Script API is not used.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;I had reported &amp;ldquo;Drive API cannot create Google Apps Script project no longer&amp;rdquo; before. &lt;a href=&#34;https://gist.github.com/tanaikech/0609f2cd989c28d6bd49d211b70b453d&#34;&gt;Ref&lt;/a&gt; About this, I had reported the future request. &lt;a href=&#34;https://issuetracker.google.com/issues/151165846&#34;&gt;Ref&lt;/a&gt; At July 30, 2020, I could confirm that the Google Apps Script project of the standalone type got to be able to be created by &lt;code&gt;multipart/form-data&lt;/code&gt; using Drive API again. &lt;a href=&#34;https://gist.github.com/tanaikech/36821c7d70f9ce376d043c3d682d404e&#34;&gt;Ref&lt;/a&gt; This is a good news for me. By this, in order to use this with Google Apps Script, I created this library. Because in this case, when the update method is used, the special scope of &lt;code&gt;https://www.googleapis.com/auth/drive.scripts&lt;/code&gt; is required. So I thought that when this is published as the Google Apps Script library, this will be useful for users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drive API got to be able to create Google Apps Script project again</title>
      <link>https://tanaikech.github.io/2020/07/30/drive-api-got-to-be-able-to-create-google-apps-script-project-again/</link>
      <pubDate>Thu, 30 Jul 2020 17:23:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/30/drive-api-got-to-be-able-to-create-google-apps-script-project-again/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/36821c7d70f9ce376d043c3d682d404e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have reported &amp;ldquo;Drive API cannot create Google Apps Script project no longer&amp;rdquo;. &lt;a href=&#34;https://gist.github.com/tanaikech/0609f2cd989c28d6bd49d211b70b453d&#34;&gt;Ref&lt;/a&gt; About this, I had reported the future request. &lt;a href=&#34;https://issuetracker.google.com/issues/151165846&#34;&gt;Ref&lt;/a&gt; Today, I could confirm that the Google Apps Script project of the standalone type got to be able to be created by &lt;code&gt;multipart/form-data&lt;/code&gt; using Drive API. This is a good news for me. By this, the following 2 patterns can be used from now.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pattern-1&#34;&gt;Pattern 1:&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create new standalone GAS project by Apps Script API.&lt;/li&gt;&#xA;&lt;li&gt;Put the local script to the created GAS project by updating the project with Apps Script API.&lt;/li&gt;&#xA;&lt;li&gt;Move the GAS project from the root folder to the specific folder using Drive API.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In this pattern, 3 API calls are required.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Files of multipart/form-data to Google Drive using Drive API with Node.js</title>
      <link>https://tanaikech.github.io/2020/07/30/uploading-files-of-multipart/form-data-to-google-drive-using-drive-api-with-node.js/</link>
      <pubDate>Thu, 30 Jul 2020 11:13:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/30/uploading-files-of-multipart/form-data-to-google-drive-using-drive-api-with-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/33563b6754e5054f3a5832667100fe91&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are the sample scripts for uploading files of &lt;code&gt;multipart/form-data&lt;/code&gt; to Google Drive using Drive API with Node.js. In this case, &lt;a href=&#34;https://github.com/googleapis/google-api-nodejs-client&#34;&gt;googleapis for Node.js&lt;/a&gt; is not used.&lt;/p&gt;&#xA;&lt;p&gt;In these sample script, the maximum file size is 5 MB. Please be careful this. When you want to upload the files more than 5 MB, please check &lt;a href=&#34;https://gist.github.com/tanaikech/ae451679e8220f3b2d48edb3f8c1a8d3&#34;&gt;this report&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-1&#34;&gt;Sample script 1&lt;/h2&gt;&#xA;&lt;p&gt;This sample script uploads a file using the modules of &lt;code&gt;fs&lt;/code&gt; and &lt;code&gt;request&lt;/code&gt;. Before you use this script, please prepare your access token for uploading the file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Showing Log in Web Apps to Apps Script Dashboard using Javascript</title>
      <link>https://tanaikech.github.io/2020/07/29/workaround-showing-log-in-web-apps-to-apps-script-dashboard-using-javascript/</link>
      <pubDate>Wed, 29 Jul 2020 09:24:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/29/workaround-showing-log-in-web-apps-to-apps-script-dashboard-using-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e27581278f8cb464dff1dd83d6f887a7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have already reported for showing the log to &amp;ldquo;Apps Script Dashboard&amp;rdquo; when it requests to the Web Apps. &lt;a href=&#34;https://tanaikech.github.io/2020/07/26/logs-in-web-apps-for-google-apps-script/&#34;&gt;Ref&lt;/a&gt; In order to show the log to &amp;ldquo;Apps Script Dashboard&amp;rdquo; when it requests to the Web Apps, it is required to use the access token. But in the current stage, when the access token is used for &lt;code&gt;XMLHttpRequest&lt;/code&gt; and &lt;code&gt;fetch&lt;/code&gt; of Javascript in the request headers, the error related to CORS occurs. So, in this report, I would like to propose the workaround for resolving this issue.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Switching Buttons for Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/07/27/switching-buttons-for-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 27 Jul 2020 08:55:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/27/switching-buttons-for-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2e6cadc1f65d42aa161bcbd24e6cadb7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are the sample scripts for achieving the switching buttons for Google Spreadsheet using Google Apps Script. The management of images using Spreadsheet service is growing now. But, in the current stage, in order to achieve the switching buttons, it needs a little ingenuity. In this report, I would like to introduce 4 kinds of the switching buttons.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pattern-1&#34;&gt;Pattern 1&lt;/h2&gt;&#xA;&lt;p&gt;In this pattern, the drawing is used as the button.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Logs in Web Apps for Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/07/26/logs-in-web-apps-for-google-apps-script/</link>
      <pubDate>Sun, 26 Jul 2020 08:26:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/26/logs-in-web-apps-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3ccb4dd8ce43de21fdb764a68c14a4d7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a report for retrieving the logs in Web Apps for Google Apps Script, when it requests to the Web Apps.&lt;/p&gt;&#xA;&lt;h2 id=&#34;experimental-condition&#34;&gt;Experimental condition&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-sample-script-for-web-apps&#34;&gt;1. Sample script for Web Apps&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doGet&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`GET method: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`GET method: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ContentService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createTextOutput&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doPost&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`POST method: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`POST method: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ContentService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createTextOutput&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;This Web Apps is deployed as &lt;code&gt;Execute the app as: Me&lt;/code&gt; and &lt;code&gt;Who has access to the app: Anyone, even anonymous&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;2-sample-google-apps-script-project&#34;&gt;2. Sample Google Apps Script project&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Google Apps Script of standalone type WITHOUT linking Google Cloud Platform (GCP) Project&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Request Body of String JSON for Google APIs with googleapis of golang</title>
      <link>https://tanaikech.github.io/2020/07/20/using-request-body-of-string-json-for-google-apis-with-googleapis-of-golang/</link>
      <pubDate>Mon, 20 Jul 2020 16:34:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/20/using-request-body-of-string-json-for-google-apis-with-googleapis-of-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3f1c8e9f40e78263ec1ade2cb9461dcc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for directly using the request body of the string JSON for Google APIs with &lt;a href=&#34;https://github.com/googleapis/google-api-go-client&#34;&gt;googleapis of golang&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;At googleapis for golang, when Google API is used, it is required to create the request body like &lt;a href=&#34;https://gist.github.com/tanaikech/76cde17cecba38f44398c3effe2aedf2&#34;&gt;this sample script&lt;/a&gt;. I have several contacts for creating about such request body. I thought that such script might be a bit difficult for users. I thought that when the string JSON object is directly used for this, it might be useful. So I would like to introduce about this. When this was useful for your situation, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting SVG Format to PNG Format using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/07/20/converting-svg-format-to-png-format-using-google-apps-script/</link>
      <pubDate>Mon, 20 Jul 2020 15:23:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/20/converting-svg-format-to-png-format-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8a6d46ca43665aa7e62965ed32336598&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting the SVG image data to PNG image data using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, there are no methods for directly converting the SVG to PNG in Google Drive service. But it can be achieved by Drive API. The sample script is as follows.&lt;/p&gt;&#xA;&lt;p&gt;Before you use this, &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services&#34;&gt;please enable Drive API at Advanced Google services&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;svgFileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the fileId of the SVG file.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Drive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;svgFileId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;thumbnailLink&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=s220&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=s1000&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;(); &lt;span style=&#34;color:#75715e&#34;&gt;// blob is the image blob of PNG format.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// In this sample, the retrieved image blob is put to Spreadsheet.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;openById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;insertImage&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setWidth&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setHeight&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In this sample script, the converted PNG image is put to the Spreadsheet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting Number Format of Cells on Google Spreadsheet using batchUpdate in Sheets API with golang</title>
      <link>https://tanaikech.github.io/2020/07/19/setting-number-format-of-cells-on-google-spreadsheet-using-batchupdate-in-sheets-api-with-golang/</link>
      <pubDate>Sun, 19 Jul 2020 16:11:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/19/setting-number-format-of-cells-on-google-spreadsheet-using-batchupdate-in-sheets-api-with-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/76cde17cecba38f44398c3effe2aedf2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for setting the number format of cells on Google Spreadsheet using batchUpdate in Sheets API with golang. In this case, &lt;a href=&#34;https://github.com/googleapis/google-api-go-client&#34;&gt;googleapis for golang&lt;/a&gt; is used. The script of the authorization can be seen at &lt;a href=&#34;https://developers.google.com/sheets/api/quickstart/go&#34;&gt;the official document&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;In this script, the number format of the column &amp;ldquo;A&amp;rdquo; is changed to &lt;code&gt;yyyy-mm-dd hh:mm:ss&lt;/code&gt;. And, please include &lt;code&gt;https://www.googleapis.com/auth/spreadsheets&lt;/code&gt; to the scopes.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;12345678&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the sheet ID which is not Spreadsheet ID. Please be careful this.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;repeatCellRequest&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RepeatCellRequest&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Fields&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;userEnteredFormat.numberFormat&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Range&lt;/span&gt;: &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GridRange&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;SheetId&lt;/span&gt;:          int64(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetId&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;StartRowIndex&lt;/span&gt;:    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;StartColumnIndex&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;EndColumnIndex&lt;/span&gt;:   &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Cell&lt;/span&gt;: &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;CellData&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;UserEnteredFormat&lt;/span&gt;: &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;CellFormat&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;NumberFormat&lt;/span&gt;: &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NumberFormat&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;Pattern&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;yyyy-mm-dd hh:mm:ss&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;:    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DATE&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;requestBody&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;BatchUpdateSpreadsheetRequest&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Requests&lt;/span&gt;: []&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Request&lt;/span&gt;{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Request&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;RepeatCell&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;repeatCellRequest&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;srv&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Spreadsheets&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;BatchUpdate&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bookID&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;requestBody&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Do&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%#v\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate&#34;&gt;Method: spreadsheets.batchUpdate&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#repeatcellrequest&#34;&gt;RepeatCellRequest&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/q/62964170&#34;&gt;How to format a cell with Google Sheets API v4 and Go?&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I answered above sample script at this thread.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Statistics of triggers Tag on Stackoverflow</title>
      <link>https://tanaikech.github.io/2020/07/19/statistics-of-triggers-tag-on-stackoverflow/</link>
      <pubDate>Sun, 19 Jul 2020 10:23:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/19/statistics-of-triggers-tag-on-stackoverflow/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9051f6de4ba88ab413fd69c227351af1&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the statistics for the tag &lt;a href=&#34;https://stackoverflow.com/tags/triggers/info&#34;&gt;&lt;code&gt;triggers&lt;/code&gt;&lt;/a&gt; on Stackoverflow. The tag of &lt;code&gt;triggers&lt;/code&gt; was created at 2011-07-28. This statistics are retrieve from Stackoverflow using Stackexchange API. About 2020, the data is retrieved from 2020-01-01 to 2020-07-16.&lt;/p&gt;&#xA;&lt;p&gt;This statistics data was obtained at 2020-07-16.&lt;/p&gt;&#xA;&lt;h2 id=&#34;measurement-result&#34;&gt;Measurement result&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200719a-fig1.png&#34;&#xA;     alt=&#34;Statistics of triggers Tag on Stackoverflow&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Fig. 1: About &lt;code&gt;triggers&lt;/code&gt; tag. Year vs. Total questions, Answered, Solved and Closed questions&lt;/p&gt;&#xA;&lt;br&gt;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200719a-fig2.png&#34;&#xA;     alt=&#34;Statistics of triggers Tag on Stackoverflow&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Users, Sessions and PageViews of User Summary Report from Google Analytics using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/07/16/retrieving-users-sessions-and-pageviews-of-user-summary-report-from-google-analytics-using-google-apps-script/</link>
      <pubDate>Thu, 16 Jul 2020 11:11:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/16/retrieving-users-sessions-and-pageviews-of-user-summary-report-from-google-analytics-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/dc3e9c8dfec9403ed0b1935605ea1476&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving &amp;ldquo;Users&amp;rdquo;, &amp;ldquo;Sessions&amp;rdquo; and &amp;ldquo;PageViews&amp;rdquo; of User Summary Report from Google Analytics using Google Apps Script. When you use this, please enable Analytics Reporting API at Advanced Google services.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startDate&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2020-01-01&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endDate&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2020-06-01&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resource&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;reportRequests&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;viewId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewId&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;dateRanges&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [{ &lt;span style=&#34;color:#a6e22e&#34;&gt;startDate&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startDate&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;endDate&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endDate&lt;/span&gt; }],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;metrics&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          { &lt;span style=&#34;color:#a6e22e&#34;&gt;expression&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ga:users&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          { &lt;span style=&#34;color:#a6e22e&#34;&gt;expression&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ga:sessions&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          { &lt;span style=&#34;color:#a6e22e&#34;&gt;expression&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ga:pageviews&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;AnalyticsReporting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Reports&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;batchGet&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;resource&lt;/span&gt;, { &lt;span style=&#34;color:#a6e22e&#34;&gt;fields&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;result&#34;&gt;Result&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;reports&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;columnHeader&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;metricHeader&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;metricHeaderEntries&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ga:users&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;INTEGER&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;INTEGER&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ga:sessions&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;INTEGER&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ga:pageviews&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maximums&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;values&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;rowCount&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;totals&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;values&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;minimums&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;values&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;isDataGolden&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;rows&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;metrics&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;values&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/analytics/devguides/reporting/core/v4&#34;&gt;Analytics Reporting API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Tags Using Together with google-apps-script Tag at Stackoverflow</title>
      <link>https://tanaikech.github.io/2020/07/16/tags-using-together-with-google-apps-script-tag-at-stackoverflow/</link>
      <pubDate>Thu, 16 Jul 2020 10:06:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/16/tags-using-together-with-google-apps-script-tag-at-stackoverflow/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ca0118158fda16550db92f544aab0424&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This table shows all tags using together with the tag of &lt;a href=&#34;https://stackoverflow.com/questions/tagged/google-apps-script&#34;&gt;&amp;ldquo;google-apps-script&amp;rdquo;&lt;/a&gt; at Stackoverflow. The tags are summarized every year. At 2020, the data is retrieved from January 1, 2020 to July 16, 2020. The number enclosed &lt;code&gt;(###)&lt;/code&gt; means the number of use of the tag. When this table was a material for discussing about the current tags for &amp;ldquo;google-apps-script&amp;rdquo;, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Year&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Used Tag list&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2008&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2009&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-form(1),google-sheets(1),google-apps-script(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2010&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(50),google-sheets(31),javascript(23),google-apps(4),custom-function(2),google-calendar-api(2),spreadsheet(2),google-docs-api(2),vba(2),google-docs(2),amazon(1),amazon-web-services(1),api(1),timezone(1),ms-office(1),xml-namespaces(1),xml(1),closures(1),google-sites(1),google-maps-api-3(1),array-formulas(1),google-sheets-formula(1),google-data-api(1),date-manipulation(1),datetime(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2011&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(72),google-sheets(31),google-apps(16),javascript(15),google-docs(8),google-spreadsheet-api(4),google-form(3),google-api(3),google-docs-api(2),spreadsheet(2),google-fusion-tables(2),google-calendar-api(2),java(2),google-app-engine(2),number-formatting(1),file-upload(1),google-apps-marketplace(1),json(1),email(1),html(1),tabpanel(1),gmail(1),performance(1),user-interface(1),zend-framework(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2012&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(1877),google-sheets(345),javascript(161),google-docs(63),google-sites(61),google-apps(54),google-spreadsheet-api(44),google-drive-api(44),gmail(40),google-calendar-api(31),google-docs-api(29),html(19),google-visualization(18),triggers(18),email(15),google-form(15),spreadsheet(14),urlfetch(13),gwt(13),oauth(13),custom-function(13),google-app-engine(12),user-interface(11),jquery(11),jdbc(10)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2013&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(2606),google-sheets(765),javascript(413),google-drive-api(124),google-docs(120),google-form(97),google-spreadsheet-api(78),google-apps(77),gmail(58),google-sites(57),html(56),google-calendar-api(41),google-api(34),email(31),google-docs-api(26),jquery(24),arrays(23),triggers(22),forms(22),google-app-engine(21),google-visualization(21),user-interface(20),spreadsheet(20),json(19),google-caja(19)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2014&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(2758),google-sheets(875),javascript(606),google-form(177),google-drive-api(168),google-docs(143),google-spreadsheet-api(90),google-apps(84),html(81),google-calendar-api(61),google-sites(56),gmail(54),email(53),jquery(49),arrays(45),forms(39),spreadsheet(35),triggers(35),excel(33),json(33),google-docs-api(28),google-api(28),google-app-engine(24),google-visualization(22),google-bigquery(22)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2015&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(2781),google-sheets(1134),javascript(714),google-form(159),html(158),google-docs(127),google-apps(115),google-spreadsheet-api(98),google-drive-api(97),gmail(66),arrays(57),google-calendar-api(57),jquery(51),google-api(46),forms(40),spreadsheet(39),email(38),google-docs-api(36),json(35),triggers(33),google-sites(32),regex(32),google-visualization(30),php(23),css(20)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2016&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(2888),google-sheets(1198),javascript(783),google-form(156),html(118),google-drive-api(117),google-apps(117),google-docs(77),arrays(74),google-spreadsheet-api(73),json(60),gmail(59),email(46),google-calendar-api(43),google-sheets-api(42),google-api(42),triggers(38),google-visualization(31),jquery(31),spreadsheet(31),google-docs-api(29),date(24),regex(23),forms(22),csv(22)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2017&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(3873),google-sheets(1537),javascript(979),google-form(194),html(158),google-sheets-api(137),google-docs(127),google-apps(122),google-drive-api(122),google-spreadsheet-api(114),arrays(110),gmail(85),email(64),json(56),gmail-api(52),google-api(52),triggers(51),jquery(51),spreadsheet(48),google-calendar-api(42),regex(34),google-sites(31),forms(27),custom-function(27),excel(27)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2018&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(4716),google-sheets(2062),javascript(1046),google-form(189),google-drive-api(189),google-docs(167),google-sheets-api(165),gmail-addons(155),html(134),triggers(129),gmail(120),arrays(111),google-calendar-api(79),json(68),google-app-maker(63),email(59),google-apps-script-addon(55),gmail-api(54),google-api(50),regex(50),custom-function(48),gsuite(47),google-bigquery(45),google-slides-api(43),web-applications(43)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2019&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(6731),google-sheets(3300),javascript(1352),google-form(263),html(250),google-sheets-api(223),google-drive-api(216),google-sheets-formula(168),google-docs(158),gmail(154),web-applications(143),arrays(141),google-sheets-macros(134),triggers(128),google-apps-script-web-application(112),google-calendar-api(88),gmail-addons(85),google-apps-script-addon(85),json(82),google-apps(77),gsuite(76),google-api(69),google-app-maker(64),scripting(61),google-apps-script-editor(61)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2020&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;google-apps-script(4853),google-sheets(2503),javascript(1221),html(199),google-form(176),google-drive-api(161),google-apps-script-web-application(160),arrays(154),google-sheets-api(149),google-docs(124),google-sheets-formula(120),google-sheets-macros(90),gmail(86),json(85),google-apps-script-simple-triggers(69),google-calendar-api(68),urlfetch(66),google-apps-script-addon(65),spreadsheet(57),triggers(51),gsuite-addons(48),gs-installable-triggers(47),email(47),gsuite(47),google-apps-script-editor(45)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>Sample Scripts for Requesting to Web Apps by Various Languages</title>
      <link>https://tanaikech.github.io/2020/07/15/sample-scripts-for-requesting-to-web-apps-by-various-languages/</link>
      <pubDate>Wed, 15 Jul 2020 15:52:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/15/sample-scripts-for-requesting-to-web-apps-by-various-languages/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a72aab0242012362c46ec69031c720d5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;top&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are the sample scripts by the various languages for requesting to &lt;a href=&#34;https://developers.google.com/apps-script/guides/web&#34;&gt;Web Apps&lt;/a&gt; created by Google Apps Script.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#curl&#34;&gt;curl&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#googleappsscript&#34;&gt;Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#javascript&#34;&gt;Javascript&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#ajax&#34;&gt;ajax&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#node&#34;&gt;Node.js&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#axios&#34;&gt;axios&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#angular&#34;&gt;angular&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#go&#34;&gt;go&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#python&#34;&gt;python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#php&#34;&gt;php&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#powershell&#34;&gt;powershell&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;sample-script-for-web-apps&#34;&gt;Sample script for Web Apps&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Sample script for Web Apps is as follows.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doGet&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ContentService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createTextOutput&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;eventObject&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ).&lt;span style=&#34;color:#a6e22e&#34;&gt;setMimeType&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ContentService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doPost&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) =&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ContentService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createTextOutput&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;eventObject&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ).&lt;span style=&#34;color:#a6e22e&#34;&gt;setMimeType&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ContentService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Setting for Web Apps is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Statistics of gas Tag on Stackoverflow</title>
      <link>https://tanaikech.github.io/2020/07/15/statistics-of-gas-tag-on-stackoverflow/</link>
      <pubDate>Wed, 15 Jul 2020 09:05:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/15/statistics-of-gas-tag-on-stackoverflow/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fa64f4e31fa017ad835568e5228b4f84&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the statistics for the tag &lt;a href=&#34;https://stackoverflow.com/tags/gas/info&#34;&gt;&lt;code&gt;gas&lt;/code&gt;&lt;/a&gt; on Stackoverflow. This statistics are retrieve from Stackoverflow using Stackexchange API. About 2020, the data is retrieved from 2020-01-01 to 2020-07-01.&lt;/p&gt;&#xA;&lt;p&gt;This statistics data was obtained at 2020-07-15.&lt;/p&gt;&#xA;&lt;h2 id=&#34;measurement-result&#34;&gt;Measurement result&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200715a-fig1.png&#34;&#xA;     alt=&#34;Statistics of gas Tag on Stackoverflow&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Fig. 1: Year vs. Total questions, Answered, Solved and Closed questions&lt;/p&gt;&#xA;&lt;br&gt;&#xD;&#xA;&lt;p&gt;Table 1: Tags which were used together with &lt;code&gt;gas&lt;/code&gt; tag for each year.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Year&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Used Tag list&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2008&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2009&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(12),assembly(11),x86(4),gcc(3),nasm(2),linux(2),relative-addressing(1),disassembly(1),avr(1),macos(1),segments(1),inline-assembly(1),tdm-mingw(1),c(1),directive(1),mips(1),compiler-construction(1),gnu(1),stack(1),multithreading(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2010&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(31),assembly(28),x86(9),ld(6),gcc(4),linux(4),arm(4),gnu(3),c(3),inline-assembly(2),linker(2),elf(1),gdb(1),macos(1),ubuntu(1),mips(1),binutils(1),iphone(1),x86-64(1),64-bit(1),macros(1),intel-syntax(1),compiler-construction(1),python(1),embedded(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2011&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(46),assembly(37),x86(16),gcc(11),c(9),linux(6),gnu(4),64-bit(3),arm(3),nasm(3),att(3),inline-assembly(3),binutils(2),x86-64(2),register-allocation(2),system-calls(1),32-bit(1),cortex-a8(1),fibonacci(1),recursion(1),xcode(1),string(1),mips(1),dwarf(1),callstack(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2012&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(59),assembly(46),gcc(15),x86(10),x86-64(6),macos(6),gnu(6),linux(6),att(5),c(5),arm(4),ld(4),system-calls(3),binutils(3),nasm(3),struct(2),elf(2),syntax(2),interrupt(2),fpu(2),inline-assembly(1),clang(1),webrtc(1),compilation(1),iphone(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2013&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(70),assembly(55),x86(18),x86-64(16),gcc(14),linux(14),att(7),nasm(6),c++(5),inline-assembly(4),c(4),syntax(3),intel-syntax(2),printf(2),arm(2),intel(2),segmentation-fault(2),arrays(2),linker(2),i386(2),ffmpeg(1),ios(1),yasm(1),tasm(1),elf(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2014&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(61),assembly(53),x86(17),c(9),gcc(8),x86-64(7),nasm(5),linux(5),gdb(4),arm(4),stack(3),masm(3),disassembly(3),att(3),inline-assembly(3),arrays(2),32-bit(2),cpu-registers(2),shellcode(1),sockets(1),intel-syntax(1),opcode(1),gnu(1),c++(1),scanf(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2015&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(89),assembly(76),x86(25),att(15),c(13),gcc(12),x86-64(12),gnu(6),nasm(4),linux(4),gdb(3),inline-assembly(3),mips(3),macos(2),clang(2),elf(2),disassembly(2),macros(2),yasm(2),xcode(2),calling-convention(2),makefile(2),ld(2),arm64(2),intel-syntax(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2016&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(97),assembly(86),x86(32),x86-64(17),gcc(16),linux(16),att(14),c(5),nasm(5),osdev(4),ld(4),x86-16(4),linker(4),c++(3),gnu(3),gdb(2),forth(2),riscv(2),dwarf(2),intel(2),memory-alignment(2),intel-syntax(2),macos(2),system-calls(2),real-mode(2)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2017&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(73),assembly(64),x86(26),gcc(22),att(15),c(11),x86-64(11),intel-syntax(4),gnu(4),linux(4),arm(4),bootloader(4),64-bit(4),nasm(3),x86-16(3),ubuntu(2),osdev(2),inline-assembly(2),gdb(2),macos(2),ld(2),string(2),go(1),if-statement(1),objdump(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2018&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(69),assembly(55),x86(24),x86-64(14),gcc(13),att(6),linux(6),arm(4),macos(3),intel-syntax(3),position-independent-code(3),forth(2),ubuntu(2),x86-16(2),gdb(2),scanf(2),inline-assembly(2),gnu(2),blockchain(2),nasm(2),ld(2),osdev(2),bootloader(2),cygwin(1),debugging(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2019&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(74),assembly(58),x86(21),x86-64(15),gcc(10),att(10),c(8),linux(8),gnu(5),gdb(5),ld(4),macros(3),intel-syntax(3),inline-assembly(2),shared-libraries(2),macos(2),dwarf(2),elf(2),arm(2),addressing-mode(2),machine-code(2),bootloader(2),c-preprocessor(1),pdp-11(1),thumb(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2020&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;gas(68),assembly(55),x86(25),gcc(17),x86-64(16),att(13),intel-syntax(7),c(4),bootloader(4),x86-16(4),osdev(3),arm(3),linux(3),c++(3),gnu(3),linker(3),arm64(2),string-literals(2),powerpc(2),riscv(2),calling-convention(2),ld(2),macos(2),clang(1),abi(1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;From Fig. 1, it shows that the tag &lt;code&gt;gas&lt;/code&gt; is used a lot at 2016. At that time, this tag is used for 97 questions. After 2016, this frequency of &lt;code&gt;gas&lt;/code&gt; is a bit low. The average frequency of use is 71.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - OwnershipTransfer</title>
      <link>https://tanaikech.github.io/2020/07/13/gas-library-ownershiptransfer/</link>
      <pubDate>Mon, 13 Jul 2020 13:39:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/13/gas-library-ownershiptransfer/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a Google Apps Script library for achieving the ownership-transfer of the specific folder including the files and sub-folders using Drive API.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/OwnershipTransfer/raw/master/images/fig1.png&#34;&#xA;     alt=&#34;GAS Library - OwnershipTransfer&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;description&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;important-please-be-careful-this&#34;&gt;IMPORTANT: PLEASE BE CAREFUL THIS.&lt;/h2&gt;&#xA;&lt;h3 id=&#34;at-first-please-read-this-section&#34;&gt;&lt;strong&gt;At first, please read this section&lt;/strong&gt;&lt;/h3&gt;&#xA;&lt;h3&gt;&lt;strong&gt;&lt;u&gt;I cannot take responsibility for the problems occurred by this library. So when you use this library, please use it by according to your own decision and at your own responsibility.&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/OwnershipTransfer/raw/master/images/fig2.png&#34;&#xA;     alt=&#34;GAS Library - OwnershipTransfer&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Transfer of owner of files got to be able to be achieved with batch requests of Drive API</title>
      <link>https://tanaikech.github.io/2020/07/10/transfer-of-owner-of-files-got-to-be-able-to-be-achieved-with-batch-requests-of-drive-api/</link>
      <pubDate>Fri, 10 Jul 2020 13:51:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/10/transfer-of-owner-of-files-got-to-be-able-to-be-achieved-with-batch-requests-of-drive-api/</guid>
      <description>&lt;p&gt;At July 7, 2020, I have reported the transfer of owner of files got not to be able to be achieved with batch requests of Drive API. &lt;a href=&#34;https://tanaikech.github.io/2020/07/07/transfer-of-owner-of-files-got-not-to-be-able-to-be-used-with-batch-requests-of-drive-api/&#34;&gt;Ref&lt;/a&gt; But today, I could confirm that this got to be able to be achieved.&lt;/p&gt;&#xA;&lt;p&gt;But, I&amp;rsquo;m worry about the possibility that this might not be able to be used in the future again.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Specification of Files: copy in Drive API was changed</title>
      <link>https://tanaikech.github.io/2020/07/09/specification-of-files-copy-in-drive-api-was-changed/</link>
      <pubDate>Thu, 09 Jul 2020 17:03:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/09/specification-of-files-copy-in-drive-api-was-changed/</guid>
      <description>&lt;p&gt;I noticed that the specification of Files: copy in Drive API was changed. About &lt;a href=&#34;https://developers.google.com/drive/api/v3/reference/files/copy&#34;&gt;the method of Files: copy in Drive API v3&lt;/a&gt;, this method could be used with the scope of &lt;code&gt;https://www.googleapis.com/auth/drive.readonly&lt;/code&gt; until July 5, 2020. But I confirmed that in the current stage, the scope is required to be changed to the following scopes.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;https://www.googleapis.com/auth/drive&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;https://www.googleapis.com/auth/drive.file&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;https://www.googleapis.com/auth/drive.appdata&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;https://www.googleapis.com/auth/drive.photos.readonly&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Please be careful this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Transfer of owner of files got not to be able to be used with batch requests of Drive API</title>
      <link>https://tanaikech.github.io/2020/07/07/transfer-of-owner-of-files-got-not-to-be-able-to-be-used-with-batch-requests-of-drive-api/</link>
      <pubDate>Tue, 07 Jul 2020 13:31:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/07/transfer-of-owner-of-files-got-not-to-be-able-to-be-used-with-batch-requests-of-drive-api/</guid>
      <description>&lt;p&gt;At 15, June 2020, I have reported the transfer of owner of files got to be able to be achieved with batch requests of Drive API. &lt;a href=&#34;https://tanaikech.github.io/2020/06/15/transfer-of-owner-of-files-got-to-be-able-to-be-achieved-with-batch-requests-of-drive-api/&#34;&gt;Ref&lt;/a&gt; And also, yesterday (06, July 2020), I could have confirmed that this could be worked. But, now (07, July 2020), the following response is returned.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;errors&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;domain&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;global&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;reason&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;invalidSharingRequest&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;message&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bad Request. User message: \&amp;#34;You can&amp;#39;t yet change the owner of this item. (We&amp;#39;re working on it.)\&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;code&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;400&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;message&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bad Request. User message: \&amp;#34;You can&amp;#39;t yet change the owner of this item. (We&amp;#39;re working on it.)\&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I hope this situation is resolved in the near future.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Statistics of appscript Tag on Stackoverflow</title>
      <link>https://tanaikech.github.io/2020/07/06/statistics-of-appscript-tag-on-stackoverflow/</link>
      <pubDate>Mon, 06 Jul 2020 10:58:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/06/statistics-of-appscript-tag-on-stackoverflow/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/66d174aab293076dad3bc4b8c5842e09&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the statistics for the tag &lt;a href=&#34;https://stackoverflow.com/tags/appscript/info&#34;&gt;&lt;code&gt;appscript&lt;/code&gt;&lt;/a&gt; on Stackoverflow. This statistics are retrieve from Stackoverflow using Stackexchange API. About 2020, the data is retrieved from 2020-01-01 to 2020-07-01.&lt;/p&gt;&#xA;&lt;p&gt;Recently, this tag is modified by editing the tags. So I think that it has to be said that this statistics data is obtained at 2020-07-06.&lt;/p&gt;&#xA;&lt;h2 id=&#34;measurement-result&#34;&gt;Measurement result&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200706a-fig1.png&#34;&#xA;     alt=&#34;Statistics of appscript Tag on Stackoverflow&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Fig. 1: Year vs. Total questions, Answered, Solved and Closed questions&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RichTextApp</title>
      <link>https://tanaikech.github.io/2020/07/03/updated-gas-library-richtextapp/</link>
      <pubDate>Fri, 03 Jul 2020 14:46:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/03/updated-gas-library-richtextapp/</guid>
      <description>&lt;h2 id=&#34;richtextapp-was-updated-to-v120&#34;&gt;RichTextApp was updated to v1.2.0&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.0 (July 3, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Added the method of &lt;a href=&#34;https://github.com/tanaikech/RichTextApp#autoresizefontforspreadsheet&#34;&gt;&lt;code&gt;AutoResizeFontForSpreadsheet&lt;/code&gt;&lt;/a&gt;. This method can automatically adjust the text length to fit in the cell width by changing the font size.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RichTextApp&#34;&gt;https://github.com/tanaikech/RichTextApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adjusting Text Length to Fit in Cell Width on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/07/03/adjusting-text-length-to-fit-in-cell-width-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 03 Jul 2020 14:31:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/03/adjusting-text-length-to-fit-in-cell-width-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/784bae8c41b7d9bcba5b581920dda3f4&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for adjusting the text length to fit in the cell width on Google Spreadsheet using Google Apps Script. In this case, in order to fit to the cell width, the font size is changed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;issue-and-workaround&#34;&gt;Issue and workaround:&lt;/h2&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, there are no methods for automatically resize the font size for fitting in the cell width in the Spreadsheet service. So in this case, it is required to think of the workaround. But the direction for calculating the length of texts in the unit of pixel cannot be directly used. Because as a test case, when I compared the text length (pixel) calculated from the font size and the cell width (pixel), those were different. By this, here, I would like to introduce a workaround using other direction. The base flow of this workaround is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Taking advantage of Web Apps with Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/07/01/updated-taking-advantage-of-web-apps-with-google-apps-script/</link>
      <pubDate>Wed, 01 Jul 2020 10:32:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/07/01/updated-taking-advantage-of-web-apps-with-google-apps-script/</guid>
      <description>&lt;p&gt;New section &lt;a href=&#34;https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script#corsinwebapps&#34;&gt;CORS in Web Apps&lt;/a&gt; was added to &lt;a href=&#34;https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script&#34;&gt;Taking advantage of Web Apps with Google Apps Script&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this section, I would like to introduce CORS in Web Apps. As the result, in order to prevent the error related to CORS, it was found the following important points.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;It is required to return &lt;code&gt;ContentService.createTextOutput()&lt;/code&gt; and &lt;code&gt;ContentService.createTextOutput(&amp;quot;done&amp;quot;)&lt;/code&gt; from &lt;code&gt;doGet&lt;/code&gt; and &lt;code&gt;doPost&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;For POST method, the data is required to be converted to the string and sent to Web Apps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Report: Processing to Create New File to Specific Folder using Drive API</title>
      <link>https://tanaikech.github.io/2020/06/29/report-processing-to-create-new-file-to-specific-folder-using-drive-api/</link>
      <pubDate>Mon, 29 Jun 2020 13:59:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/29/report-processing-to-create-new-file-to-specific-folder-using-drive-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d034e38169503c2c22eb0c3352ae30b6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this report, I would like to report for processing to create new file to the specific folder using Drive API. When the new file is created to the specific folder using Drive API, the property of &lt;code&gt;parents&lt;/code&gt; with the value of folder ID is included in the request body of the method &amp;ldquo;Files: create&amp;rdquo;. About this process, I had thought that the file is directly created to the specific folder. But, I could confirm that the new file is created by the following process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Update JSON object using jq</title>
      <link>https://tanaikech.github.io/2020/06/27/update-json-object-using-jq/</link>
      <pubDate>Sat, 27 Jun 2020 12:35:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/27/update-json-object-using-jq/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e8979e269fb2fd7eae535019ad83781c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Achieving the following conversion using &lt;a href=&#34;https://stedolan.github.io/jq/&#34;&gt;&lt;code&gt;jq&lt;/code&gt;&lt;/a&gt;. In this conversion, when &lt;code&gt;key2&lt;/code&gt; is true, &lt;code&gt;updated_&lt;/code&gt; is added to the value of &lt;code&gt;key1&lt;/code&gt; and the value of &lt;code&gt;key2&lt;/code&gt; is 2 times and &lt;code&gt;key2a&lt;/code&gt; is added by adding &lt;code&gt;updated_&lt;/code&gt; to the value as new property.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conversion&#34;&gt;Conversion&lt;/h2&gt;&#xA;&lt;h3 id=&#34;from&#34;&gt;From&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;123&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;456&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;789&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;to&#34;&gt;To&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;updated_value1&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;246&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2a&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;updated_123&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;456&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;updated_value3&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1578&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2a&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;updated_789&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;command&#34;&gt;Command&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;[{&amp;#34;key1&amp;#34;:&amp;#34;value1&amp;#34;,&amp;#34;key2&amp;#34;:123,&amp;#34;key3&amp;#34;:true},{&amp;#34;key1&amp;#34;:&amp;#34;value2&amp;#34;,&amp;#34;key2&amp;#34;:456,&amp;#34;key3&amp;#34;:false},{&amp;#34;key1&amp;#34;:&amp;#34;value3&amp;#34;,&amp;#34;key2&amp;#34;:789,&amp;#34;key3&amp;#34;:true}]&amp;#39;&lt;/span&gt; | jq &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;[.[] | select(.key3 == true) |= {&amp;#34;key1&amp;#34;: (&amp;#34;updated_&amp;#34; + .key1), &amp;#34;key2&amp;#34;: (.key2 * 2), &amp;#34;key2a&amp;#34;: (&amp;#34;updated_&amp;#34; + (.key2|tostring)), &amp;#34;key3&amp;#34;: .key3}]&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;testing&#34;&gt;Testing&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://jqplay.org/s/RbKiioures&#34;&gt;https://jqplay.org/s/RbKiioures&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Search Dialog Sample using TextFinder with Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/06/26/search-dialog-sample-using-textfinder-with-google-apps-script/</link>
      <pubDate>Fri, 26 Jun 2020 16:06:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/26/search-dialog-sample-using-textfinder-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/64ab751e8fd8727d23e5f159c00e1579&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for the search dialog using &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/text-finder&#34;&gt;TextFinder&lt;/a&gt; with Google Apps Script. If this sample script could help to indicate the possibility of TextFinder, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;In this demonstration, the value of &lt;code&gt;test&lt;/code&gt; is searched. When &lt;code&gt;&amp;quot;NEXT&amp;quot;&lt;/code&gt; is clicked, the next searched value is activated. When &lt;code&gt;&amp;quot;PREVIOUS&amp;quot;&lt;/code&gt; is clicked, the previous searched value is activated. The search can be done for all sheets in the Google Spreadsheet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Putting Multiple Hyperlinks to a Cell using Sheets API</title>
      <link>https://tanaikech.github.io/2020/06/26/workaround-putting-multiple-hyperlinks-to-a-cell-using-sheets-api/</link>
      <pubDate>Fri, 26 Jun 2020 08:09:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/26/workaround-putting-multiple-hyperlinks-to-a-cell-using-sheets-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b18c0189a5d0266a849090fdbe6750a5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a current workaround for putting the multiple hyperlinks to a cell using Sheets API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Recently, at Spreadsheet service, the multiple hyperlinks got to be able to be put to a cell. &lt;a href=&#34;https://stackoverflow.com/a/61788303/7108653&#34;&gt;Ref&lt;/a&gt; In this case, it can be achieved using &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/rich-text-value&#34;&gt;RichTextValue&lt;/a&gt;. On the other hand, at Sheets API, in the current stage, there are no methods for directly putting the multiple hyperlinks to a cell. And also, such methods have not been added. I believe that such methods will be added in the future update. I think that when this is implemented, it might be added to &lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#TextFormatRun&#34;&gt;TextFormatRun&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Texts on Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/06/24/managing-texts-on-google-slides-using-google-apps-script/</link>
      <pubDate>Wed, 24 Jun 2020 11:57:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/24/managing-texts-on-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/04e7b7657f97ddd7c68b6a9ddc3cdf98&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for managing the texts on Google Slides using Google Apps Script. Recently, I got the request like this. I published this here, because I thought that this might be also useful for other users.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200624a-fig1.gif&#34;&#xA;     alt=&#34;Managing Texts on Google Slides using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this demonstration, the text of &lt;code&gt;{{baz}}&lt;/code&gt; on Google Slides are searched and replaced to other text, and also, the text style is changed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround: Correctly Exporting Charts on Google Spreadsheet as Images using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/06/23/workaround-correctly-exporting-charts-on-google-spreadsheet-as-images-using-google-apps-script/</link>
      <pubDate>Tue, 23 Jun 2020 13:22:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/23/workaround-correctly-exporting-charts-on-google-spreadsheet-as-images-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0237042dcdaf53d3164468ca37e08a80&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for correctly exporting the charts on Google Spreadsheet as the images using Google Apps Script. In the current stage, using Google Apps Script, when the charts on Google Spreadsheet are exported as the images, it seems that the exported images are not the same with the original one on Google Spreadsheet. About this, today, I could notice that I had answered for 2 questions. &lt;a href=&#34;https://stackoverflow.com/q/55890392&#34;&gt;Q1&lt;/a&gt;, &lt;a href=&#34;https://stackoverflow.com/q/62038597&#34;&gt;Q2&lt;/a&gt; And also, I had already been reported this at the issue tracker. &lt;a href=&#34;https://issuetracker.google.com/issues/131557147&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Difference Between 2 Arrays using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/06/19/retrieving-difference-between-2-arrays-using-google-apps-script/</link>
      <pubDate>Fri, 19 Jun 2020 16:18:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/19/retrieving-difference-between-2-arrays-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cc7bdfe67c3b72c48c290fc11c231e72&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the difference between 2 arrays, which are the old values and the new values, using Google Apps Script. In my environment, I sometimes have the situation that it is required to retrieve the difference between 2 arrays. So I prepared this as a sample script. I think that this can be also used at Javascript and Node.js. If this was also useful for your situation, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RichTextApp</title>
      <link>https://tanaikech.github.io/2020/06/17/updated-gas-library-richtextapp/</link>
      <pubDate>Wed, 17 Jun 2020 20:48:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/17/updated-gas-library-richtextapp/</guid>
      <description>&lt;h2 id=&#34;richtextapp-was-updated-to-v113&#34;&gt;RichTextApp was updated to v1.1.3&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.3 (June 17, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The variable name for the error processing was not correct. The bug was removed.&lt;/li&gt;&#xA;&lt;li&gt;Added &lt;a href=&#34;https://github.com/tanaikech/RichTextApp/blob/master/README.md#samples&#34;&gt;a sample script&lt;/a&gt; for using this library.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RichTextApp&#34;&gt;https://github.com/tanaikech/RichTextApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RichTextApp</title>
      <link>https://tanaikech.github.io/2020/06/16/updated-gas-library-richtextapp/</link>
      <pubDate>Tue, 16 Jun 2020 15:11:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/16/updated-gas-library-richtextapp/</guid>
      <description>&lt;h2 id=&#34;richtextapp-was-updated-to-v112&#34;&gt;RichTextApp was updated to v1.1.2&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.0 (June 16, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Add new method of &lt;code&gt;RichTextToHTMLForSpreadsheet&lt;/code&gt;. The method of &lt;code&gt;RichTextToHTMLForSpreadsheet&lt;/code&gt; can convert the rich texts in the cells to the HTML format.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.1 (June 16, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;About the method of &lt;code&gt;RichTextToHTMLForSpreadsheet&lt;/code&gt;, I forgot to convert hyperlinks to HTML. This was modified.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.2 (June 16, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When one row and several columns are used as the range, only 1st column is returned. This bug was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RichTextApp&#34;&gt;https://github.com/tanaikech/RichTextApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Transfer of owner of files got to be able to be achieved with batch requests of Drive API</title>
      <link>https://tanaikech.github.io/2020/06/15/transfer-of-owner-of-files-got-to-be-able-to-be-achieved-with-batch-requests-of-drive-api/</link>
      <pubDate>Mon, 15 Jun 2020 14:37:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/15/transfer-of-owner-of-files-got-to-be-able-to-be-achieved-with-batch-requests-of-drive-api/</guid>
      <description>&lt;p&gt;Today, I could confirm that the transfer of owner of files got to be able to be achieved with batch requests of Drive API. When I had tested this at January 31, 2020, an error of &lt;code&gt;there is no function to change the owner of this item yet (currently under development)&lt;/code&gt; had occurred.&lt;/p&gt;&#xA;&lt;p&gt;But today, I could confirm that this got to be able to be achieved by the batch requests. By this, the owner of a lot of files can be transferred by reducing both the process cost and the quota cost.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Batch Requests for Drive API using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/06/15/batch-requests-for-drive-api-using-google-apps-script/</link>
      <pubDate>Mon, 15 Jun 2020 11:33:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/15/batch-requests-for-drive-api-using-google-apps-script/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;These are the sample scripts of the batch requests for Drive API using Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When we want to manage the files and folders on Google Drive, we have 2 ways. One is the use of &lt;a href=&#34;https://developers.google.com/apps-script/reference/drive&#34;&gt;Drive service&lt;/a&gt;. Another is the use of &lt;a href=&#34;https://developers.google.com/drive&#34;&gt;Drive API&lt;/a&gt;. In the case of them, when we want to manage a lot of files and folders, unfortunately, both ways have no batch requests. Namely, for example, the metadata of a lot of files are changed, &lt;a href=&#34;https://developers.google.com/apps-script/reference/drive/file&#34;&gt;the methods in Class File&lt;/a&gt; and &lt;a href=&#34;https://developers.google.com/drive/api/v3/reference/files/update&#34;&gt;Files: update&lt;/a&gt; are required to be used in the loop. In this case, the process cost will be high. On the other hand, Drive API can use &lt;a href=&#34;https://developers.google.com/drive/api/v3/batch&#34;&gt;the batch requests&lt;/a&gt;. But in this case, in order to use this batch requests with Google Apps Script, it is required to create the request body of &lt;code&gt;multipart/mixed&lt;/code&gt; by each user. Because there are no methods for automatically requests the batch requests. From this situation, here, I would like to introduce the simple sample scripts for creating, updating and deleting the files and folders on Google Drive using the batch requests with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing A Lot Of Google Calendar Events using Batch Requests with Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/06/12/managing-a-lot-of-google-calendar-events-using-batch-requests-with-google-apps-script/</link>
      <pubDate>Fri, 12 Jun 2020 16:14:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/12/managing-a-lot-of-google-calendar-events-using-batch-requests-with-google-apps-script/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is the sample scripts for managing a lot of Google Calendar Events using the batch requests with Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When we want to manage the events of Google Calendar, we have 2 ways. One is the use of &lt;a href=&#34;https://developers.google.com/apps-script/reference/calendar&#34;&gt;Calendar service&lt;/a&gt;. Another is the use of &lt;a href=&#34;https://developers.google.com/calendar&#34;&gt;Calendar API&lt;/a&gt;. In the case of them, when we want to manage a lot of calendar events, unfortunately, both ways have no batch requests. Namely, for example, when a lot of events are deleted, &lt;a href=&#34;https://developers.google.com/apps-script/reference/calendar/calendar-event#deleteEvent()&#34;&gt;&lt;code&gt;deleteEvent()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://developers.google.com/calendar/v3/reference/events/delete&#34;&gt;Events: delete&lt;/a&gt; are required to be used in the loop. In this case, the process cost will be high. On the other hand, Calendar API can use &lt;a href=&#34;https://developers.google.com/calendar/batch&#34;&gt;the batch requests&lt;/a&gt;. But in this case, in order to use this batch requests with Google Apps Script, it is required to create the request body of &lt;code&gt;multipart/mixed&lt;/code&gt; by each user. Because there are no methods for automatically requests the batch requests. From this situation, here, I would like to introduce the simple sample scripts for creating, updating and deleting the events of Google Calendar using the batch requests with Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - BatchRequest</title>
      <link>https://tanaikech.github.io/2020/06/12/updated-gas-library-batchrequest/</link>
      <pubDate>Fri, 12 Jun 2020 14:43:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/12/updated-gas-library-batchrequest/</guid>
      <description>&lt;h2 id=&#34;batchrequest-was-updated-to-v112&#34;&gt;BatchRequest was updated to v1.1.2.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.1 (June 12, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Error handling for the input object was added.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.2 (June 12, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Removed a bug that when the returned value is empty, an error occurred.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/BatchRequest&#34;&gt;https://github.com/tanaikech/BatchRequest&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Highlighting Row and Column of Selected Cell using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/06/11/highlighting-row-and-column-of-selected-cell-using-google-apps-script/</link>
      <pubDate>Thu, 11 Jun 2020 20:55:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/11/highlighting-row-and-column-of-selected-cell-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3e6b6bbc13cd9814aa918c9933fb862f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for highlighting the row and column of the selected cell using Google Apps Script. For this, the OnSelectionChange event trigger is used.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200611b-img.gif&#34;&#xA;     alt=&#34;Highlighting Row and Column of Selected Cell using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Please copy and paste the following script to the script editor of Spreadsheet. And, please select a cell. By this, the script is run by the OnSelectionChange event trigger.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Disabling Buttons Put on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/06/11/disabling-buttons-put-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Thu, 11 Jun 2020 10:58:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/11/disabling-buttons-put-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/28102d28b929e102f6fe88e7d42e2d64&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample script for disabling the buttons put on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When a script is run by clicking a button on Google Spreadsheet, there is the case that you don&amp;rsquo;t want to make users run the script in duplicate. This sample script achieves this situation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200611a-fig1.png&#34;&#xA;     alt=&#34;Disabling Buttons Put on Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this demonstration, 2 types of buttons are used. Those are the drawing and image, respectively. When the button is clicked, the worker of 10 seconds is run. You can see that after the button was clicked, even when the button is clicked again, the worker script is not run.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - BatchRequest</title>
      <link>https://tanaikech.github.io/2020/06/10/updated-gas-library-batchrequest/</link>
      <pubDate>Wed, 10 Jun 2020 14:56:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/10/updated-gas-library-batchrequest/</guid>
      <description>&lt;h2 id=&#34;batchrequest-was-updated-to-v110&#34;&gt;BatchRequest was updated to v1.1.0.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.0 (June 10, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;New method of &lt;a href=&#34;https://github.com/tanaikech/BatchRequest#method-edo&#34;&gt;&lt;code&gt;EDo()&lt;/code&gt;&lt;/a&gt; was added. This method is the enhanced &lt;code&gt;Do()&lt;/code&gt; method. When this method is used, the result values from the batch requests are parsed. And also, the number of requests more than 100 can be used. In this case, the split of the number of requests is processed for the limitation of 100.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/BatchRequest&#34;&gt;https://github.com/tanaikech/BatchRequest&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enhanced Custom Function for Google Spreadsheet using Web Apps as Wrapper</title>
      <link>https://tanaikech.github.io/2020/06/08/enhanced-custom-function-for-google-spreadsheet-using-web-apps-as-wrapper/</link>
      <pubDate>Mon, 08 Jun 2020 14:48:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/08/enhanced-custom-function-for-google-spreadsheet-using-web-apps-as-wrapper/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a proposal of the enhanced custom function for Google Spreadsheet using Web Apps as the wrapper.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/Enhanced-Custom-Function-for-Google-Spreadsheet-using-Web-Apps-as-Wrapper/raw/master/images/fig1.gif&#34;&#xA;     alt=&#34;Enhanced Custom Function for Google Spreadsheet using Web Apps as Wrapper&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When the custom function is used, in the current specification, the most methods except several methods (for example, one of them is UrlFetchApp.) that the authorization is required cannot be used. So for example, when the filenames in the folder are retrieved from the folder name, unfortunately, this cannot be directly achieved. When this is tried, an error like &lt;code&gt;Exception: You do not have permission to call DriveApp.getFoldersByName. Required permissions: (https://www.googleapis.com/auth/drive.readonly || https://www.googleapis.com/auth/drive)&lt;/code&gt; occurs. From this situation, it is considered that when the authorization has already been done, the method that the authorization is required might be able to be used. In this report. I would like to introduce the method for using such methods by using Web Apps as the wrapper.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Shared Drive using Drive Service of Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/06/02/managing-shared-drive-using-drive-service-of-google-apps-script/</link>
      <pubDate>Tue, 02 Jun 2020 20:42:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/02/managing-shared-drive-using-drive-service-of-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ede1c9ea6eb6a27235df7d4cb16ef48d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When &lt;a href=&#34;https://developers.google.com/drive/api/v3/reference/files/list&#34;&gt;the method of &amp;ldquo;Files: list&amp;rdquo; in Drive API v3&lt;/a&gt;, the official document of &lt;code&gt;includeItemsFromAllDrives&lt;/code&gt; and &lt;code&gt;supportsAllDrives&lt;/code&gt; says as follows.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Deprecated - Whether both My Drive and shared drive items should be included in results. This parameter will only be effective until June 1, 2020. Afterwards shared drive items are included in the results. (Default: false)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Deprecated - Whether the requesting application supports both My Drives and shared drives. This parameter will only be effective until June 1, 2020. Afterwards all applications are assumed to support shared drives. (Default: false)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GetFileList for golang, Javascript, Node.js and Python</title>
      <link>https://tanaikech.github.io/2020/06/01/updated-getfilelist-for-golang-javascript-node.js-and-python/</link>
      <pubDate>Mon, 01 Jun 2020 14:12:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/06/01/updated-getfilelist-for-golang-javascript-node.js-and-python/</guid>
      <description>&lt;p&gt;Updated: GetFileList for golang, Javascript, Node.js and Python&lt;/p&gt;&#xA;&lt;p&gt;This is the libraries to retrieve the file list with the folder tree from the specific folder of own Google Drive and shared Drives.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Golang: &lt;a href=&#34;https://github.com/tanaikech/go-getfilelist&#34;&gt;https://github.com/tanaikech/go-getfilelist&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Updated to v1.0.4.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Javascript: &lt;a href=&#34;https://github.com/tanaikech/GetFileList_js&#34;&gt;https://github.com/tanaikech/GetFileList_js&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Updated to v1.0.3.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Node.js: &lt;a href=&#34;https://github.com/tanaikech/node-getfilelist&#34;&gt;https://github.com/tanaikech/node-getfilelist&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Updated to v1.0.5.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Python: &lt;a href=&#34;https://github.com/tanaikech/getfilelistpy&#34;&gt;https://github.com/tanaikech/getfilelistpy&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Updated to v1.0.6.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RunAll</title>
      <link>https://tanaikech.github.io/2020/05/31/updated-gas-library-runall/</link>
      <pubDate>Sun, 31 May 2020 16:13:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/31/updated-gas-library-runall/</guid>
      <description>&lt;h2 id=&#34;runall-was-updated-to-v112&#34;&gt;&lt;a href=&#34;https://github.com/tanaikech/RunAll&#34;&gt;RunAll&lt;/a&gt; was updated to v1.1.2.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.2 (May 31, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When the access token and project ID are not included in the object, &lt;code&gt;getOAuthToken()&lt;/code&gt; and &lt;code&gt;getScriptId()&lt;/code&gt;. By this, an error is removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RunAll&#34;&gt;https://github.com/tanaikech/RunAll&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - FilesApp</title>
      <link>https://tanaikech.github.io/2020/05/29/updated-gas-library-filesapp/</link>
      <pubDate>Fri, 29 May 2020 17:11:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/29/updated-gas-library-filesapp/</guid>
      <description>&lt;p&gt;FilesApp was updated to v1.1.2.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.2 (May 29, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A bug that all files were not retrieved from the shared drive was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/FilesApp&#34;&gt;GitHub of FilesApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Shortcut on Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/05/28/creating-shortcut-on-google-drive-using-google-apps-script/</link>
      <pubDate>Thu, 28 May 2020 14:49:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/28/creating-shortcut-on-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4639cccc8130cea10d753fee9f900041&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating a shortcut on Google Drive using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;Before you run the script, &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services&#34;&gt;please enable Drive API at Advanced Google services&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;createShortcut&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;targetId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;folderId&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resource&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;shortcutDetails&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;targetId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;targetId&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.shortcut&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;folderId&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;resource&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parents&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [{ &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderId&lt;/span&gt; }];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;shortcut&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Drive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;insert&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;resource&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;shortcut&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;targetId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the ID of target file or folder.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;shortcutName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the shortcut name.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please set the folder ID for putting the created shortcut.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;createShortcut&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;targetId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;shortcutName&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;folderId&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced&#34;&gt;Advanced Google services&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Detecting Quickly Checked Checkboxes on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/05/27/detecting-quickly-checked-checkboxes-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 27 May 2020 13:44:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/27/detecting-quickly-checked-checkboxes-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7b1a18a5b768e4d69d519069f4aff440&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This is a report for detecting quickly checked checkboxes on Google Spreadsheet using Google Apps Script. It supposes that when the checkbox is checked, a function of Google Apps Script is run by the event trigger. In this case, when the multiple checkboxes on Google Spreadsheet are checked quickly, the script cannot be run for all checked checkboxes, because of the response speed of the event trigger. It is considered that to understand the response of event trigger is useful for creating the application for Spreadsheet. In this report, the detection of quickly checked checkboxes on Google Spreadsheet using Google Apps Script has been investigated. From this result, it led to understanding the response of event trigger.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - CopyFolder</title>
      <link>https://tanaikech.github.io/2020/05/26/gas-library-copyfolder/</link>
      <pubDate>Tue, 26 May 2020 07:53:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/26/gas-library-copyfolder/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is Google Apps Script library for copying folder on Google Drive.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/CopyFolder/blob/master/images/fig1.png&#34;&#xA;     alt=&#34;GAS Library - CopyFolder&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;I have sometimes the situation that it is required to back up the folder on Google Drive to Google Drive. But unfortunately, the method of &lt;a href=&#34;https://developers.google.com/apps-script/reference/drive/file#makecopy&#34;&gt;&lt;code&gt;makeCopy()&lt;/code&gt;&lt;/a&gt; of Class File and the method of &lt;a href=&#34;https://developers.google.com/drive/api/v3/reference/files/copy&#34;&gt;&lt;code&gt;Files: copy&lt;/code&gt;&lt;/a&gt; of Drive API cannot be used for directly copying the folder on Google Drive. So I created this as a library. This library can copy the folder on Google Drive. All files in the folder can be copied to Google Drive with keeping the folder structure. When there are the files with newer modified time in the source folder than those in the destination folder, the files in the destination folder are overwritten by the newer files in the source folder. Also, in this library, the folders in the shared Drive and the publicly shared folders can be used as the source and destination folder.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Characteristics of Response for onSelectionChange</title>
      <link>https://tanaikech.github.io/2020/05/19/characteristics-of-response-for-onselectionchange/</link>
      <pubDate>Tue, 19 May 2020 14:19:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/19/characteristics-of-response-for-onselectionchange/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ca5812ed19dd6858879246bd2304266f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;I have already reported about &amp;ldquo;Change Tab Detection on Google Spreadsheet using onSelectionChange Event Trigger with Google Apps Script&amp;rdquo;. &lt;a href=&#34;https://tanaikech.github.io/2020/05/18/change-tab-detection-on-google-spreadsheet-using-onselectionchange-event-trigger-with-google-apps-script/&#34;&gt;Ref&lt;/a&gt; It is considered that when the situation which uses the event trigger of &lt;code&gt;onSelectionChange&lt;/code&gt; is thought, the response speed is important. So, here, I investigated the characteristics of response for the event trigger of &lt;code&gt;onSelectionChange&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200519a-fig1.gif&#34;&#xA;     alt=&#34;Characteristics of Response for onSelectionChange&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;experiment&#34;&gt;Experiment&lt;/h2&gt;&#xA;&lt;h3 id=&#34;sample-script&#34;&gt;Sample script&lt;/h3&gt;&#xA;&lt;p&gt;In order to investigate the response speed, I used the following sample script. The work of sample script can be seen at above demonstration movie. In this report, the script is important for discussing the result. So I pot this at this section instead of the appendix.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Change Tab Detection on Google Spreadsheet using onSelectionChange Event Trigger with Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/05/18/change-tab-detection-on-google-spreadsheet-using-onselectionchange-event-trigger-with-google-apps-script/</link>
      <pubDate>Mon, 18 May 2020 15:50:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/18/change-tab-detection-on-google-spreadsheet-using-onselectionchange-event-trigger-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/524c16dbef722763f80312357d0e4368&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;onSelectionChange&lt;/code&gt; has been released at &lt;a href=&#34;https://developers.google.com/apps-script/releases/#april_22_2020&#34;&gt;April 22, 2020&lt;/a&gt;. But this couldn&amp;rsquo;t be used at the released day. But now, I could confirm that this got to be able to be used. So in order to test this event trigger, I prepared a simple sample script. This is a sample script for detecting the change tab on Google Spreadsheet using onSelectionChange Event Trigger with Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200518b-fig1.gif&#34;&#xA;     alt=&#34;Change Tab Detection on Google Spreadsheet using onSelectionChange Event Trigger with Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated Specification of Google Spreadsheet: Multiple Hyperlinks to a Cell</title>
      <link>https://tanaikech.github.io/2020/05/15/updated-specification-of-google-spreadsheet-multiple-hyperlinks-to-a-cell/</link>
      <pubDate>Fri, 15 May 2020 13:24:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/15/updated-specification-of-google-spreadsheet-multiple-hyperlinks-to-a-cell/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d39b4b5ccc5a1d50f5b8b75febd807a6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Recently, it seems that the specification of Google Spreadsheet was updated. Before this, when a cell has only one hyperlink. In this case, the hyperlink was given to a cell using &lt;code&gt;=HYPERLINK(&amp;quot;http://www.google.com/&amp;quot;, &amp;quot;Google&amp;quot;)&lt;/code&gt; as following figure.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200515a_fig1.png&#34;&#xA;     alt=&#34;Updated Specification of Google Spreadsheet: Multiple Hyperlinks to a Cell&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;But by the recent update&lt;/strong&gt;, a cell got to be able to have multiple hyperlinks as following figure. In this case, the hyperlinks are set by the RichTextValue object.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Javascript library - GetFileList_js</title>
      <link>https://tanaikech.github.io/2020/05/15/updated-javascript-library-getfilelist_js/</link>
      <pubDate>Fri, 15 May 2020 12:15:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/15/updated-javascript-library-getfilelist_js/</guid>
      <description>&lt;h2 id=&#34;getfilelist_-was-updated-to-v102&#34;&gt;&lt;a href=&#34;https://github.com/tanaikech/GetFileList_js&#34;&gt;GetFileList_js&lt;/a&gt; was updated to v1.0.2.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (May 15, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Shared drive got to be able to be used. The file list can be retrieved from both your Google Drive and the shared drive.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For example, when the folder ID in the shared Drive is used &lt;code&gt;id&lt;/code&gt; of &lt;code&gt;resource&lt;/code&gt;, you can retrieve the file list from the folder in the shared Drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GetFileList_js&#34;&gt;https://github.com/tanaikech/GetFileList_js&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: python library - getfilelistpy</title>
      <link>https://tanaikech.github.io/2020/05/15/updated-python-library-getfilelistpy/</link>
      <pubDate>Fri, 15 May 2020 11:49:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/15/updated-python-library-getfilelistpy/</guid>
      <description>&lt;h2 id=&#34;python-library---getfilelistpy-was-updated-to-v105&#34;&gt;python library - getfilelistpy was updated to v1.0.5.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.5 (May 15, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Shared drive got to be able to be used. The file list can be retrieved from both your Google Drive and the shared drive.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For example, when the folder ID in the shared Drive is used &lt;code&gt;id&lt;/code&gt; of &lt;code&gt;resource&lt;/code&gt;, you can retrieve the file list from the folder in the shared Drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check getfilelistpy at &lt;a href=&#34;https://github.com/tanaikech/getfilelistpy&#34;&gt;https://github.com/tanaikech/getfilelistpy&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can also check getfilelistpy at &lt;a href=&#34;https://pypi.org/project/getfilelistpy/&#34;&gt;https://pypi.org/project/getfilelistpy/&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Go Library - go-getfilelist to v103</title>
      <link>https://tanaikech.github.io/2020/05/14/updated-go-library-go-getfilelist-to-v103/</link>
      <pubDate>Thu, 14 May 2020 16:02:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/14/updated-go-library-go-getfilelist-to-v103/</guid>
      <description>&lt;h2 id=&#34;go-getfilelist-was-updated-to-v103&#34;&gt;go-getfilelist was updated to v1.0.3&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (May 14, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Shared drive got to be able to be used. The file list can be retrieved from both your Google Drive and the shared drive.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For example, when the folder ID in the shared Drive is used &lt;code&gt;folderID&lt;/code&gt; of &lt;code&gt;Folder(folderID)&lt;/code&gt;, you can retrieve the file list from the folder in the shared Drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can get this from &lt;a href=&#34;https://github.com/tanaikech/go-getfilelist&#34;&gt;https://github.com/tanaikech/go-getfilelist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: node module - google-drive-getfilelist</title>
      <link>https://tanaikech.github.io/2020/05/14/updated-node-module-google-drive-getfilelist/</link>
      <pubDate>Thu, 14 May 2020 14:38:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/14/updated-node-module-google-drive-getfilelist/</guid>
      <description>&lt;h2 id=&#34;node-module---google-drive-getfilelist-was-updated-to-v104&#34;&gt;node module - google-drive-getfilelist was updated to v1.0.4&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.4 (May 14, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Shared drive got to be able to be used. The file list can be retrieved from both your Google Drive and the shared drive.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For example, when the folder ID in the shared Drive is used &lt;code&gt;id&lt;/code&gt; of &lt;code&gt;resource&lt;/code&gt;, you can retrieve the file list from the folder in the shared Drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can get this from &lt;a href=&#34;https://github.com/tanaikech/node-getfilelist&#34;&gt;https://github.com/tanaikech/node-getfilelist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can also get this from &lt;a href=&#34;https://www.npmjs.com/package/google-drive-getfilelist&#34;&gt;https://www.npmjs.com/package/google-drive-getfilelist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - FilesApp</title>
      <link>https://tanaikech.github.io/2020/05/14/updated-gas-library-filesapp/</link>
      <pubDate>Thu, 14 May 2020 09:44:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/14/updated-gas-library-filesapp/</guid>
      <description>&lt;p&gt;FilesApp was updated to v1.1.0.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Shared drive got to be able to be used. From the version 1.1.0, the following modification was added.&#xA;&lt;ol&gt;&#xA;&lt;li&gt;V8 is used.&lt;/li&gt;&#xA;&lt;li&gt;As the default setting, the file list is retrieved from both your Google Drive and the shared drive.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By this, for example, when the folder ID in the shared Drive is used to &lt;code&gt;###&lt;/code&gt; of &lt;code&gt;const res = FilesApp.createTree(&amp;quot;###&amp;quot;)&lt;/code&gt;, the folder tree of the shared Drive is retrieved, if you have the shared Drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;And also,  FilesApp was updated to v1.1.1.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hiding and Deleting Rows and Columns on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/05/11/hiding-and-deleting-rows-and-columns-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 11 May 2020 16:18:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/11/hiding-and-deleting-rows-and-columns-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a1e6c0b49043cbf92f8b3c25d18ebeed&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are the sample scripts for hiding and deleting rows and columns on Google Spreadsheet using Google Apps Script. I sometimes see the questions for hiding and deleting rows and columns on Spreadsheet at Stackoverflow. So here, I would like to introduce the sample scripts for this.&lt;/p&gt;&#xA;&lt;p&gt;In this case, when the process costs of the scripts created by using Spreadsheet service and Sheets API are compared, the cost of script created by Sheets API is much lower than that of script created by Spreadsheet service. So when the rows and columns of your Spreadsheet is large and you can use Sheets API, I recommend to use Sheets API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When &#39;//&#39; in template literal is used in a HTML file in script editor, it is used as a comment start</title>
      <link>https://tanaikech.github.io/2020/05/10/when-/-in-template-literal-is-used-in-a-html-file-in-script-editor-it-is-used-as-a-comment-start/</link>
      <pubDate>Sun, 10 May 2020 09:40:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/05/10/when-/-in-template-literal-is-used-in-a-html-file-in-script-editor-it-is-used-as-a-comment-start/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5a6b92f9fcce4046ae4c3c79c28fe958&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;When &lt;code&gt;//&lt;/code&gt; in template literal is used in a HTML file in script editor, it is used as a comment start.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sample&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`//`&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For example, when above script is used in a HTML file at the script editor, &lt;code&gt;;&amp;quot;&lt;/code&gt; of &lt;code&gt;const sample =`//`;&lt;/code&gt; is used as the comment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;I would like to explain about this bug using the following sample flow.&lt;/p&gt;&#xA;&lt;h3 id=&#34;flow&#34;&gt;Flow&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Create new Spreadsheet and open the script editor. In this explanation, please use the container-bound script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workaround for Retrieving Direct Links of All Sheets from URL of 2PACX- of Web Published Google Spreadsheet</title>
      <link>https://tanaikech.github.io/2020/04/27/workaround-for-retrieving-direct-links-of-all-sheets-from-url-of-2pacx-of-web-published-google-spreadsheet/</link>
      <pubDate>Mon, 27 Apr 2020 08:51:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/04/27/workaround-for-retrieving-direct-links-of-all-sheets-from-url-of-2pacx-of-web-published-google-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e6251657d425d2827fee6dd3daf47976&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the direct links of all sheets from the URL like &lt;code&gt;https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml&lt;/code&gt; of the web published Google Spreadsheet. This sample script can be used for the following situation.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The Spreadsheet is published to Web and the URL like &lt;code&gt;https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml&lt;/code&gt; is known&lt;/li&gt;&#xA;&lt;li&gt;You are not the owner of Google Spreadsheet.&lt;/li&gt;&#xA;&lt;li&gt;You don&amp;rsquo;t know the Spreadsheet ID and Sheet IDs.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Under above situation, unfortunately, the direct links of each sheet cannot be directly retrieved. I think that this is the specification of Google side. So in this post, I would like to introduce a workaround for retrieving the direct links of each sheet under above situation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: CLI Tool - goris</title>
      <link>https://tanaikech.github.io/2020/04/23/updated-cli-tool-goris/</link>
      <pubDate>Thu, 23 Apr 2020 15:30:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/04/23/updated-cli-tool-goris/</guid>
      <description>&lt;p&gt;goris is a CLI tool to search for images with Google Reverse Image Search.&lt;/p&gt;&#xA;&lt;p&gt;Today, it was updated to v2.0.0. Please check it out. &lt;a href=&#34;https://github.com/tanaikech/goris&#34;&gt;https://github.com/tanaikech/goris&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.0.0 (April 23, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The specification for running the reverse image search was changed at Google side. By this, this application was also changed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Updating a File with Resumable Upload using Drive API</title>
      <link>https://tanaikech.github.io/2020/04/20/updating-a-file-with-resumable-upload-using-drive-api/</link>
      <pubDate>Mon, 20 Apr 2020 14:41:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/04/20/updating-a-file-with-resumable-upload-using-drive-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bc33a83ac648911d00b43c59a24268fc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample flow for updating a file with the resumable upload using Drive API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-situation&#34;&gt;Sample situation:&lt;/h2&gt;&#xA;&lt;p&gt;In this answer, as a sample situation, it supposes that a text file in Google Drive is updated by the resumable upload with the multiple chunks. And as the method for requesting, I use the curl command.&lt;/p&gt;&#xA;&lt;p&gt;I prepared 2 files for 2 chunks. As the test situation, the 2 chunks of &lt;strong&gt;262,144 bytes&lt;/strong&gt; and &lt;strong&gt;37,856 bytes&lt;/strong&gt; are uploaded. So total upload size is &lt;strong&gt;300,000 bytes&lt;/strong&gt;. Those filenames are &lt;code&gt;data1.txt&lt;/code&gt; and &lt;code&gt;data2.txt&lt;/code&gt;, respectively.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Limitation of Array.prototype.push.apply under V8 for Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/04/20/limitation-of-array.prototype.push.apply-under-v8-for-google-apps-script/</link>
      <pubDate>Mon, 20 Apr 2020 14:11:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/04/20/limitation-of-array.prototype.push.apply-under-v8-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3e3c16b58f6b30de366eba99de84c861&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When V8 is enabled, &lt;code&gt;Array.apply&lt;/code&gt; has the limitation for the number of elements. When it is over the limitation, an error like &lt;code&gt;RangeError: Maximum call stack size exceeded&lt;/code&gt; occurs, while the issue didn&amp;rsquo;t occur when V8 is disabled. In this case, this issue occurs at both Google Apps Script and Javascript. So please be careful this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-situation&#34;&gt;Sample situation&lt;/h2&gt;&#xA;&lt;p&gt;For example, when &lt;code&gt;Array.prototype.push.apply&lt;/code&gt; is used for combining the arrays because the process cost of &lt;code&gt;Array.prototype.push.apply&lt;/code&gt; is lowest of 3 patterns of &lt;code&gt;Array.prototype.push.apply&lt;/code&gt;, &lt;code&gt;Spread syntax&lt;/code&gt; and &lt;code&gt;concat&lt;/code&gt;, please be careful above issue. &lt;a href=&#34;https://gist.github.com/tanaikech/7198bc9019202f4080de8fd2e1b278fb#5-arrayprototypepushapply-spread-syntax-and-concat&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - FetchApp</title>
      <link>https://tanaikech.github.io/2020/04/13/updated-gas-library-fetchapp/</link>
      <pubDate>Mon, 13 Apr 2020 21:27:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/04/13/updated-gas-library-fetchapp/</guid>
      <description>&lt;h3 id=&#34;fetchapp-was-updated-to-v101&#34;&gt;FetchApp was updated to v1.0.1.&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (April 13, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When V8 runtime is enabled, it was found that an error occurred. So this bug was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/FetchApp&#34;&gt;https://github.com/tanaikech/FetchApp&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Expanding A1Notations using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/04/04/updated-expanding-a1notations-using-google-apps-script/</link>
      <pubDate>Sat, 04 Apr 2020 15:07:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/04/04/updated-expanding-a1notations-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4fd7d66771d552ed83166df314cb0024&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for expanding a1Notations using Google Apps Script. This was updated from &lt;a href=&#34;https://gist.github.com/tanaikech/c59b90324c90935b13f9e7b26cbf436a&#34;&gt;this sample script&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;expandA1Notations_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a1Notations&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxRow&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxColumn&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;maxRow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxRow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1000&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;maxColumn&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxColumn&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Ref: https://stackoverflow.com/a/21231012/7108653&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;columnToLetter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; String.&lt;span style=&#34;color:#a6e22e&#34;&gt;fromCharCode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;65&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letterToColumn&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt; =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;charCodeAt&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;pow&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RegExp(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^([A-Z]+)([0-9]+)$&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RegExp(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^([A-Z]+)$&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RegExp(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^([0-9]+)$&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1Notations&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;!&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toUpperCase&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toUpperCase&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;)];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reg2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxRow&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toUpperCase&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;), [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxRow&lt;/span&gt;]];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reg2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [[&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxRow&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toUpperCase&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;)];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reg3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxColumn&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxColumn&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toUpperCase&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;), [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxColumn&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;]];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reg3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toUpperCase&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;reg1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxColumn&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;, [&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxColumn&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r1&lt;/span&gt;]];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&lt;span style=&#34;color:#e6db74&#34;&gt;`Wrong a1Notation: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;startRowIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;endRowIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;startColumnIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letterToColumn&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;endColumnIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letterToColumn&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letterToColumn&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;startRowIndex&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;endRowIndex&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;startColumnIndex&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;endColumnIndex&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;columnToLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// When you use this script, please run main().&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1Notations&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1:E3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;B10:W13&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EZ5:FA8&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;AAA1:AAB3&amp;#34;&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;expandA1Notations_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a1Notations&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;result&#34;&gt;Result&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&amp;#34;A1&amp;#34;,&amp;#34;B1&amp;#34;,&amp;#34;C1&amp;#34;,&amp;#34;D1&amp;#34;,&amp;#34;E1&amp;#34;,&amp;#34;A2&amp;#34;,&amp;#34;B2&amp;#34;,&amp;#34;C2&amp;#34;,&amp;#34;D2&amp;#34;,&amp;#34;E2&amp;#34;,&amp;#34;A3&amp;#34;,&amp;#34;B3&amp;#34;,&amp;#34;C3&amp;#34;,&amp;#34;D3&amp;#34;,&amp;#34;E3&amp;#34;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&amp;#34;B10&amp;#34;,&amp;#34;C10&amp;#34;,&amp;#34;D10&amp;#34;,&amp;#34;E10&amp;#34;,&amp;#34;F10&amp;#34;,&amp;#34;G10&amp;#34;,&amp;#34;H10&amp;#34;,&amp;#34;I10&amp;#34;,&amp;#34;J10&amp;#34;,&amp;#34;K10&amp;#34;,&amp;#34;L10&amp;#34;,&amp;#34;M10&amp;#34;,&amp;#34;N10&amp;#34;,&amp;#34;O10&amp;#34;,&amp;#34;P10&amp;#34;,&amp;#34;Q10&amp;#34;,&amp;#34;R10&amp;#34;,&amp;#34;S10&amp;#34;,&amp;#34;T10&amp;#34;,&amp;#34;U10&amp;#34;,&amp;#34;V10&amp;#34;,&amp;#34;W10&amp;#34;,&amp;#34;B11&amp;#34;,&amp;#34;C11&amp;#34;,&amp;#34;D11&amp;#34;,&amp;#34;E11&amp;#34;,&amp;#34;F11&amp;#34;,&amp;#34;G11&amp;#34;,&amp;#34;H11&amp;#34;,&amp;#34;I11&amp;#34;,&amp;#34;J11&amp;#34;,&amp;#34;K11&amp;#34;,&amp;#34;L11&amp;#34;,&amp;#34;M11&amp;#34;,&amp;#34;N11&amp;#34;,&amp;#34;O11&amp;#34;,&amp;#34;P11&amp;#34;,&amp;#34;Q11&amp;#34;,&amp;#34;R11&amp;#34;,&amp;#34;S11&amp;#34;,&amp;#34;T11&amp;#34;,&amp;#34;U11&amp;#34;,&amp;#34;V11&amp;#34;,&amp;#34;W11&amp;#34;,&amp;#34;B12&amp;#34;,&amp;#34;C12&amp;#34;,&amp;#34;D12&amp;#34;,&amp;#34;E12&amp;#34;,&amp;#34;F12&amp;#34;,&amp;#34;G12&amp;#34;,&amp;#34;H12&amp;#34;,&amp;#34;I12&amp;#34;,&amp;#34;J12&amp;#34;,&amp;#34;K12&amp;#34;,&amp;#34;L12&amp;#34;,&amp;#34;M12&amp;#34;,&amp;#34;N12&amp;#34;,&amp;#34;O12&amp;#34;,&amp;#34;P12&amp;#34;,&amp;#34;Q12&amp;#34;,&amp;#34;R12&amp;#34;,&amp;#34;S12&amp;#34;,&amp;#34;T12&amp;#34;,&amp;#34;U12&amp;#34;,&amp;#34;V12&amp;#34;,&amp;#34;W12&amp;#34;,&amp;#34;B13&amp;#34;,&amp;#34;C13&amp;#34;,&amp;#34;D13&amp;#34;,&amp;#34;E13&amp;#34;,&amp;#34;F13&amp;#34;,&amp;#34;G13&amp;#34;,&amp;#34;H13&amp;#34;,&amp;#34;I13&amp;#34;,&amp;#34;J13&amp;#34;,&amp;#34;K13&amp;#34;,&amp;#34;L13&amp;#34;,&amp;#34;M13&amp;#34;,&amp;#34;N13&amp;#34;,&amp;#34;O13&amp;#34;,&amp;#34;P13&amp;#34;,&amp;#34;Q13&amp;#34;,&amp;#34;R13&amp;#34;,&amp;#34;S13&amp;#34;,&amp;#34;T13&amp;#34;,&amp;#34;U13&amp;#34;,&amp;#34;V13&amp;#34;,&amp;#34;W13&amp;#34;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&amp;#34;EZ5&amp;#34;,&amp;#34;FA5&amp;#34;,&amp;#34;EZ6&amp;#34;,&amp;#34;FA6&amp;#34;,&amp;#34;EZ7&amp;#34;,&amp;#34;FA7&amp;#34;,&amp;#34;EZ8&amp;#34;,&amp;#34;FA8&amp;#34;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&amp;#34;AAA1&amp;#34;,&amp;#34;AAB1&amp;#34;,&amp;#34;AAA2&amp;#34;,&amp;#34;AAB2&amp;#34;,&amp;#34;AAA3&amp;#34;,&amp;#34;AAB3&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;retrieve-duplicated-cells&#34;&gt;Retrieve duplicated cells&lt;/h2&gt;&#xA;&lt;p&gt;When this script is used, the duplicated cells can be retrieved as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drawing objects on Spreadsheet got to be able to be managed</title>
      <link>https://tanaikech.github.io/2020/04/03/drawing-objects-on-spreadsheet-got-to-be-able-to-be-managed/</link>
      <pubDate>Fri, 03 Apr 2020 14:22:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/04/03/drawing-objects-on-spreadsheet-got-to-be-able-to-be-managed/</guid>
      <description>&lt;p&gt;The drawing objects on Google Spreadsheet got to be able to be managed by the update at April 2, 2020. &lt;a href=&#34;https://developers.google.com/apps-script/releases/#april_2_2020&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By this update, we can assign the function to the drawing objects and remove the drawing objects. The following sample is for removing the drawing objects on the active sheet. &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/drawing#remove()&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSheet&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;getDrawings&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Retrieving Overwrapped Cells Between 2 Ranges on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/04/03/retrieving-overwrapped-cells-between-2-ranges-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 03 Apr 2020 14:11:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/04/03/retrieving-overwrapped-cells-between-2-ranges-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/492cc2bb0b978fdb344aa821962baf53&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the overwrapped cells between 2 ranges on Google Spreadsheet using Google Apps Script. Please use this with enabling V8.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getOverwrappedRanges_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;rangeList1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rangeList2&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;rangeList1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RangeList&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;rangeList2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RangeList&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Input RangeList object.&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Ref: https://stackoverflow.com/a/21231012/7108653&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;columnToLetter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; String.&lt;span style=&#34;color:#a6e22e&#34;&gt;fromCharCode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;65&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Expand range1.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rangeList1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRanges&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startRow1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRow&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endRow1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startRow1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getNumRows&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startColumn1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getColumn&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endColumn1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startColumn1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getNumColumns&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startRow1&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endRow1&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startColumn1&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endColumn1&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;columnToLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }, []);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Expand range2.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rangeList2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRanges&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startRow2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRow&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endRow2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startRow2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getNumRows&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startColumn2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getColumn&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endColumn2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startColumn2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getNumColumns&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startRow2&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endRow2&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startColumn2&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endColumn2&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;columnToLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }, &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Map&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;has&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;B3:C7&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D6:E9&amp;#34;&lt;/span&gt;]; &lt;span style=&#34;color:#75715e&#34;&gt;// Please input range1 as a1Notation.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A2:B3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C7:D10&amp;#34;&lt;/span&gt;]; &lt;span style=&#34;color:#75715e&#34;&gt;// Please input range2 as a1Notation.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSheet&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getOverwrappedRanges_&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRangeList&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;range1&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRangeList&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;range2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// &amp;lt;--- [&amp;#34;B3&amp;#34;,&amp;#34;C7&amp;#34;,&amp;#34;D7&amp;#34;,&amp;#34;D8&amp;#34;,&amp;#34;D9&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In this sample script, from the ranges of &lt;code&gt;&amp;quot;B3:C7&amp;quot;, &amp;quot;D6:E9&amp;quot;&lt;/code&gt; and &lt;code&gt;&amp;quot;A2:B3&amp;quot;, &amp;quot;C7:D10&amp;quot;&lt;/code&gt;, the overwrapped cells are returned. In this case, &lt;code&gt;[&amp;quot;B3&amp;quot;,&amp;quot;C7&amp;quot;,&amp;quot;D7&amp;quot;,&amp;quot;D8&amp;quot;,&amp;quot;D9&amp;quot;]&lt;/code&gt; is returned.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Process Costs under V8 using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/03/22/benchmark-process-costs-under-v8-using-google-apps-script/</link>
      <pubDate>Sun, 22 Mar 2020 13:46:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/03/22/benchmark-process-costs-under-v8-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a name=&#34;top&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7198bc9019202f4080de8fd2e1b278fb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;March 22, 2020&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Published.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;V8 engine got to be able to be used at Google Apps Script. By this, I have reported about the process costs with and without using V8. &lt;a href=&#34;https://gist.github.com/tanaikech/3331e1e631d619abef8f32c4be14ba3a&#34;&gt;Ref&lt;/a&gt; It is considered that knowing the process costs for various methods will be useful for creating the applications with Google Apps Script. Here, I would like to introduce the process costs of each situations under V8. The situations which measured the cost are as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Files and Folders without Parents in Google Drive</title>
      <link>https://tanaikech.github.io/2020/03/13/retrieving-files-and-folders-without-parents-in-google-drive/</link>
      <pubDate>Fri, 13 Mar 2020 17:00:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/03/13/retrieving-files-and-folders-without-parents-in-google-drive/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/459089e678bad943f0f33e497e04c36f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the files and folders which have no parents in own Google Drive.&lt;/p&gt;&#xA;&lt;p&gt;When you use this script, please enable Drive API at Advanced Google services.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; () =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ScriptApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getOAuthToken&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fields&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; decodeURIComponent(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nextPageToken,files(name,id,mimeType,parents)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; decodeURIComponent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;me&amp;#39; in owners and trashed = false&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pageToken&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`https://www.googleapis.com/drive/v3/files?pageSize=1000&amp;amp;fields=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fields&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;amp;q=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;amp;pageToken=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pageToken&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      { &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;authorization&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Bearer &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt; } }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;apply&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pageToken&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nextPageToken&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;pageToken&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt;(({ &lt;span style=&#34;color:#a6e22e&#34;&gt;parents&lt;/span&gt; }) =&amp;gt; &lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;parents&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When you run the script, the files and folders which have no parents in own Google Drive are retrieved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Completed: Web Application for searching Google Apps Script Library from Database</title>
      <link>https://tanaikech.github.io/2020/03/12/completed-web-application-for-searching-google-apps-script-library-from-database/</link>
      <pubDate>Thu, 12 Mar 2020 11:58:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/03/12/completed-web-application-for-searching-google-apps-script-library-from-database/</guid>
      <description>&lt;p&gt;Web Application for searching Google Apps Script Library from Database was completed. So I published it as v1.0.0. Please check &lt;a href=&#34;https://github.com/tanaikech/Google-Apps-Script-Library-Database&#34;&gt;Google Apps Script Library Database&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v174</title>
      <link>https://tanaikech.github.io/2020/03/11/updated-ggsrun-to-v174/</link>
      <pubDate>Wed, 11 Mar 2020 15:48:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/03/11/updated-ggsrun-to-v174/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/UpdateHistory.md#174&#34;&gt;v1.7.4 (March 11, 2020)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Recently, I noticed that new Google Apps Script project of the standalone script type cannot be created by the create method of Drive API. From now, in order to create the standalone Google Apps Script project, only Google Apps Script API is required to be used. &lt;a href=&#34;https://gist.github.com/tanaikech/0609f2cd989c28d6bd49d211b70b453d&#34;&gt;Ref&lt;/a&gt; By this, I updated ggsrun. So the command for creating new GAS project is not changed.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$ ggsrun u -p ###folderId### -f sample.gs -pn sampleGASProjectName&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drive API cannot create Google Apps Script project no longer</title>
      <link>https://tanaikech.github.io/2020/03/09/drive-api-cannot-create-google-apps-script-project-no-longer/</link>
      <pubDate>Mon, 09 Mar 2020 15:09:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/03/09/drive-api-cannot-create-google-apps-script-project-no-longer/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0609f2cd989c28d6bd49d211b70b453d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Today, I noticed that new Google Apps Script project of the standalone script type cannot be created by the method of Files: create in Drive API. From now, in order to manage the Google Apps Script project, only Google Apps Script API is required to be used. By this, the following issues are brought.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the new standalone GAS project is created in the specific folder by uploading the local script, the following flow is required to be run.&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create new standalone GAS project by Apps Script API.&lt;/li&gt;&#xA;&lt;li&gt;Put the local script to the created GAS project by updating the project with Apps Script API.&lt;/li&gt;&#xA;&lt;li&gt;Move the GAS project from the root folder to the specific folder using Drive API.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;From now, 3 API calls are required to be used like above. By the way, this had been able to be achieved by one API call of the method of files.create in Drive API before.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Script of Resumable Upload with Google Drive API for Python</title>
      <link>https://tanaikech.github.io/2020/03/05/simple-script-of-resumable-upload-with-google-drive-api-for-python/</link>
      <pubDate>Thu, 05 Mar 2020 14:10:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/03/05/simple-script-of-resumable-upload-with-google-drive-api-for-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f709a952ff6e286027950d0484f6c03e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a simple sample script for achieving the resumable upload to Google Drive using Python. In order to achieve the resumable upload, at first, it is required to retrieve the location, which is the endpoint of upload. The location is included in the response headers. After the location was retrieved, the file can be uploaded to the location URL.&lt;/p&gt;&#xA;&lt;p&gt;In this sample, a PNG file is uploaded with the resumable upload using a single chunk.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Script of Resumable Upload with Google Drive API for Node.js</title>
      <link>https://tanaikech.github.io/2020/03/05/simple-script-of-resumable-upload-with-google-drive-api-for-node.js/</link>
      <pubDate>Thu, 05 Mar 2020 13:48:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/03/05/simple-script-of-resumable-upload-with-google-drive-api-for-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ae451679e8220f3b2d48edb3f8c1a8d3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a simple sample script for achieving the resumable upload to Google Drive using Node.js. In order to achieve the resumable upload, at first, it is required to retrieve the location, which is the endpoint of upload. The location is included in the response headers. After the location was retrieved, the file can be uploaded to the location URL.&lt;/p&gt;&#xA;&lt;p&gt;In this sample, a PNG file is uploaded with the resumable upload using a single chunk.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web Apps: Fields Builder For Google APIs</title>
      <link>https://tanaikech.github.io/2020/03/04/web-apps-fields-builder-for-google-apis/</link>
      <pubDate>Wed, 04 Mar 2020 16:08:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/03/04/web-apps-fields-builder-for-google-apis/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://sites.google.com/view/fields-builder&#34;&gt;FieldsBuilderForGoogleAPIs&lt;/a&gt; is a Web Application for building the fields value for using Google APIs. This is mainly used for developing the scripts for using Google APIs.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/FieldsBuilderForGoogleAPIs/raw/master/images/demo.gif&#34;&#xA;     alt=&#34;Web Apps: Fields Builder For Google APIs&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;After the API explorer was updated, the fields of APIs cannot be created by the web interface. But it is important for using the fields property. Because when the fields property is used, only the required values can be retrieved. This leads to the low cost. And even when &lt;code&gt;*&lt;/code&gt; is used, there are some cases that all fields cannot be retrieved. So I created this as a Web Application. This web application can run with the standalone. No authorization and no scopes are required. This only creates the fields value for Google APIs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - GPhotoApp</title>
      <link>https://tanaikech.github.io/2020/02/26/gas-library-gphotoapp/</link>
      <pubDate>Wed, 26 Feb 2020 09:27:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/02/26/gas-library-gphotoapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a GAS library for retrieving and creating the albums and media items using Google Photo API using Google Apps Script (GAS).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;&#xA;&lt;p&gt;In the current stage, Google Photo API is not included in Advanced Google services. But in order to use Google Photo API with Google Apps Script, I created this as a GAS library. So in the current stage, in order to use this library, the following flow is required.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v126</title>
      <link>https://tanaikech.github.io/2020/02/23/updated-goodls-to-v126/</link>
      <pubDate>Sun, 23 Feb 2020 16:03:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/02/23/updated-goodls-to-v126/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.6 (February 23, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When the files are downloaded from the shared folder, if an error occurs, the download was stopped. In &lt;a href=&#34;https://github.com/tanaikech/goodls/issues/9&#34;&gt;this thread&lt;/a&gt;, a request for skipping this error was proposed. This request was implemented at v1.2.6. Please try the option of &lt;code&gt;--skiperror&lt;/code&gt; like below.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$ goodls -u https://drive.google.com/drive/folders/###?usp=sharing --skiperror&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - RichTextApp</title>
      <link>https://tanaikech.github.io/2020/02/19/gas-library-richtextapp/</link>
      <pubDate>Wed, 19 Feb 2020 14:28:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/02/19/gas-library-richtextapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/RichTextApp/raw/master/images/fig1.png&#34;&#xA;     alt=&#34;GAS Library - RichTextApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a GAS library for copying the rich text with the text styles from Google Document to Google Spreadsheet or from Google Spreadsheet to Google Document using Google Apps Script (GAS).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;&#xA;&lt;p&gt;Google Spreadsheet can use the rich text as the cell value. But I thought that it is difficult for me to directly edit the rich text in a cell. So I wanted to copy the rich text, that I edited at the Google Document, to the cell of Google Spreadsheet. But, unfortunately, when the rich text in Google Document is manually copied to a cell in Google Spreadsheet, the text style is removed. By this, only text values are copied. It seemed that this was the current specification. So in order to achieve above, I created this as a library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading File to Google Drive using HTML and Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/02/18/uploading-file-to-google-drive-using-html-and-google-apps-script/</link>
      <pubDate>Tue, 18 Feb 2020 08:36:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/02/18/uploading-file-to-google-drive-using-html-and-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/280b782ee0518aa083a4fe0d71384823&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a simple sample script for uploading a file using the file input tag of HTML. As the important point, the file is sent as the byte array for using Google Apps Script. By this, at Google Apps Script side, the byte array can be converted to a blob using a simple script.&lt;/p&gt;&#xA;&lt;h3 id=&#34;html--javascript&#34;&gt;HTML &amp;amp; Javascript&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onchange&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;saveFile(this)&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;saveFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FileReader&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onload&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;bytes&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [...&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Int8Array&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;target&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;google&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;withSuccessHandler&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)).&lt;span style=&#34;color:#a6e22e&#34;&gt;saveFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;readAsArrayBuffer&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;google-apps-script&#34;&gt;Google Apps Script&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;saveFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;bytes&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Done.&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Google Apps Script Library Database and Search Application</title>
      <link>https://tanaikech.github.io/2020/02/17/google-apps-script-library-database-and-search-application/</link>
      <pubDate>Mon, 17 Feb 2020 10:22:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/02/17/google-apps-script-library-database-and-search-application/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is for the Google Apps Script Library Database.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Since Google Apps Script was released on August 19th, 2009, it is used by a lot of users. &lt;a href=&#34;https://gist.github.com/tanaikech/4e4f1ca20b8dbce08f87289db415df7d&#34;&gt;Ref1&lt;/a&gt;, &lt;a href=&#34;https://gist.github.com/tanaikech/fd7dbc6d630fd0550c32159635cecc96&#34;&gt;Ref2&lt;/a&gt; By this, now there are a lot of useful libraries of Google Apps Script (GAS) in all over the world. But when I want to search a GAS library, I always use Google search engine. Unfortunately, in the current stage, the libraries cannot be directly searched by a database. On January 11th, 2020, a proposal for the database of Google Apps Script Library has been proposed by &lt;a href=&#34;https://github.com/andrewroberts&#34;&gt;Andrew Roberts&lt;/a&gt;. &lt;a href=&#34;https://groups.google.com/forum/#!topic/google-apps-script-community/sXO6_vCIbgI&#34;&gt;Ref3&lt;/a&gt; When I have discussing about this with him, I thought that I tried to think of a sample database. So I prepared this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web Applications</title>
      <link>https://tanaikech.github.io/webapps/</link>
      <pubDate>Mon, 17 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://tanaikech.github.io/webapps/</guid>
      <description>&lt;h2 id=&#34;web-applications&#34;&gt;Web Applications&lt;/h2&gt;&#xA;&lt;p&gt;Here, I would like to introduce my web applications.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://sites.google.com/view/search-gas-libraries&#34;&gt;Search Google Apps Script Libraries&lt;/a&gt;&lt;/strong&gt; : This is an application for searching Google Apps Script libraries from &lt;a href=&#34;https://github.com/tanaikech/Google-Apps-Script-Library-Database&#34;&gt;the database&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://sites.google.com/view/fields-builder&#34;&gt;Fields Builder For Google APIs&lt;/a&gt;&lt;/strong&gt; : FieldsBuilderForGoogleAPIs is a Web Application for building the value of the field for using Google APIs. This is mainly used for developing the scripts for using Google APIs. &lt;a href=&#34;https://github.com/tanaikech/FieldsBuilderForGoogleAPIs&#34;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ManifestsApp</title>
      <link>https://tanaikech.github.io/2020/02/12/updated-gas-library-manifestsapp/</link>
      <pubDate>Wed, 12 Feb 2020 14:13:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/02/12/updated-gas-library-manifestsapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ManifestsApp&#34;&gt;ManifestsApp&lt;/a&gt; was updated to v1.0.4.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.4 (February 12, 2020)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&amp;ldquo;runtimeVersion&amp;rdquo; got to be able to be got and set. Now, &amp;lsquo;STABLE&amp;rsquo;, &amp;lsquo;V8&amp;rsquo;, &amp;lsquo;DEPRECATED_ES5&amp;rsquo; can be used as the value of &amp;ldquo;runtimeVersion&amp;rdquo;. For example, you can enable V8 with the following script.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ManifestsApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setProjectId&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;projectId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setRuntimeVersion&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;V8&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;As one important point, when &amp;ldquo;STABLE&amp;rdquo; and &amp;ldquo;DEPRECATED_ES5&amp;rdquo; are used for the Google Apps Script project created before 2020 as the value of &amp;ldquo;runtimeVersion&amp;rdquo;, the error of &lt;code&gt;Syntax error: Illegal character.&lt;/code&gt; occurs. So please be careful this. This has been reported at &lt;a href=&#34;https://issuetracker.google.com/issues/149341213&#34;&gt;the issuetracker&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rearranging Columns on Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/02/10/rearranging-columns-on-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 10 Feb 2020 15:14:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/02/10/rearranging-columns-on-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/59dc1398785803d188393fb04673f1bc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for rearranging the columns on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;In this sample script, the columns are rearranged with an array including the rearranged column indexes.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rearrangeColumns&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;concat&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }, []);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;moveColumns&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSheet&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rearrangedColumnIndexes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;rearrangeColumns&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rearrangedColumnIndexes&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;rearrangedColumnIndexes&lt;/code&gt; is the indexes of rearranged columns.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Loop for Array Processing using Google Apps Script with V8</title>
      <link>https://tanaikech.github.io/2020/02/09/benchmark-loop-for-array-processing-using-google-apps-script-with-v8/</link>
      <pubDate>Sun, 09 Feb 2020 17:01:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/02/09/benchmark-loop-for-array-processing-using-google-apps-script-with-v8/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3331e1e631d619abef8f32c4be14ba3a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;top&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;center&gt;&#xD;&#xA;- February 9, 2020&#xD;&#xA;   - Published.&#xD;&#xA;- March 15, 2020&#xD;&#xA;   - Results of &#34;for of&#34; and &#34;for of with iterator&#34; were added.&#xD;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please be careful! This result can be only used for Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are a limit executing time for Google Apps Script (GAS). That is 6 minutes.&lt;a href=&#34;#references&#34;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; So users always have to pay attention to reducing the process cost of the scripts. Especially, it is very important to know the process cost for the array processing, because the array processing is often used for spreadsheet and Google APIs. I have already reported &amp;ldquo;Benchmark: Loop for Array Processing using Google Apps Script&amp;rdquo;.&lt;a href=&#34;#references&#34;&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&#34;https://gist.github.com/tanaikech/8246f89540957b177f0e350f453ea2fb&#34;&gt;At February 7, 2020, the V8 runtime got to be able to be used in my account.&lt;/a&gt; By this, it is considered that it is possibly changed the result of benchmark without V8 &lt;a href=&#34;#references&#34;&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;. So I measured about this. In this report, the process cost of &amp;ldquo;loop&amp;rdquo; for the array processing using GAS has been investigated with V8 runtime.&lt;/p&gt;</description>
    </item>
    <item>
      <title>V8 Runtime was added to Google Apps Script at February 7, 2020</title>
      <link>https://tanaikech.github.io/2020/02/07/v8-runtime-was-added-to-google-apps-script-at-february-7-2020/</link>
      <pubDate>Fri, 07 Feb 2020 11:09:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/02/07/v8-runtime-was-added-to-google-apps-script-at-february-7-2020/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8246f89540957b177f0e350f453ea2fb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In my environment, at February 7, 2020, when I opened the script editor of Google Apps Script, the following notification could be seen.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200207a_fig1.png&#34;&#xA;     alt=&#34;V8 Runtime was added to Google Apps Script at February 7, 2020&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;By this, I could notice that finally, the V8 Runtime has already been added to Google Apps Script. I think that this will be also the great news for a lot of users including me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - DateFinder</title>
      <link>https://tanaikech.github.io/2020/01/30/gas-library-datefinder/</link>
      <pubDate>Thu, 30 Jan 2020 13:37:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/30/gas-library-datefinder/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;DateFinder is a GAS library for searching the date objects from the cell range on the sheet in the Spreadsheet and retrieving the searched range as the RangeList object using Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;There is &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/text-finder&#34;&gt;the Class TextFinder&lt;/a&gt; for searching the text from cells of the Spreadsheet using the Google Apps Script. But in this case, the date object in the cell is used as the string. Namely, the values for searching are used as the same with the values retrieved by &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/range#getdisplayvalues&#34;&gt;&lt;code&gt;getDisplayValues()&lt;/code&gt;&lt;/a&gt;. So for example, when there are the date objects in the cells with the various formats, the date cannot be searched by the Class TextFinder. So I created this library. When this library is used, the date objects in the cells can be retrieved by the date object and/or the range between 2 dates.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v125</title>
      <link>https://tanaikech.github.io/2020/01/29/updated-goodls-to-v125/</link>
      <pubDate>Wed, 29 Jan 2020 14:17:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/29/updated-goodls-to-v125/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.5 (January 29, 2020)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;An option for selecting whether the top directory is created was added.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$ goodls -u [URL] --notcreatetopdirectory&lt;/code&gt; or &lt;code&gt;$ goodls -u [URL] -ntd&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;When this option is NOT used (default situation), when a folder including sub-folders is downloaded, the top folder which is downloaded is created as the top directory under the working directory. When this option is used, the top directory is not created and all files and sub-folders under the top folder are downloaded under the working directory.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/goodls/issues/8&#34;&gt;This feature request&lt;/a&gt; was implemented.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - EncodeApp</title>
      <link>https://tanaikech.github.io/2020/01/24/gas-library-encodeapp/</link>
      <pubDate>Fri, 24 Jan 2020 16:39:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/24/gas-library-encodeapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;EncodeApp is a GAS library for retrieving the encoding set (charset) and doing URL encode with the specific encoding set using Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/EncodeApp&#34;&gt;https://github.com/tanaikech/EncodeApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>URL Encode with Shift-JIS using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/01/23/url-encode-with-shift-jis-using-google-apps-script/</link>
      <pubDate>Thu, 23 Jan 2020 15:35:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/23/url-encode-with-shift-jis-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f23755d7e024fea9c0f0e036853484d4&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for achieving the URL encode with Shift-JIS using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, there are no methods for directly achieving above in the methods of Google Apps Script. So it is required to prepare it as the script. In order to use &lt;code&gt;Shift-JIS&lt;/code&gt; of the character set at Google Apps Script, it is required to use it as the binary data. Because, when the value of &lt;code&gt;Shift-JIS&lt;/code&gt; is retrieved as the string by Google Apps Script, the character set is automatically changed to &lt;code&gt;UTF-8&lt;/code&gt;. Please be careful this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Libraries of gdoctableapp for golang, Node.js and python were updated to v110</title>
      <link>https://tanaikech.github.io/2020/01/22/libraries-of-gdoctableapp-for-golang-node.js-and-python-were-updated-to-v110/</link>
      <pubDate>Wed, 22 Jan 2020 15:22:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/22/libraries-of-gdoctableapp-for-golang-node.js-and-python-were-updated-to-v110/</guid>
      <description>&lt;h2 id=&#34;libraries-of-gdoctableapp-for-golang-nodejs-and-python-were-updated-to-v110&#34;&gt;Libraries of gdoctableapp for golang, Node.js and python were updated to v1.1.0&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/go-gdoctableapp&#34;&gt;go-gdoctableapp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.1.0 (January 22, 2020)&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/go-gdoctableapp#replacetexts&#34;&gt;2 new methods were added.&lt;/a&gt; From this version, the texts can be replaced by images. The direct link and local file can be used as the image.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/node-gdoctableapp&#34;&gt;node-gdoctableapp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.1.0 (January 22, 2020)&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/node-gdoctableapp#replacetexts&#34;&gt;New method was added.&lt;/a&gt; From this version, the texts can be replaced by images. The direct link and local file can be used as the image.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/gdoctableapppy&#34;&gt;gdoctableapppy&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Libraries of gdoctableapp for golang, Node.js and python were updated to v105</title>
      <link>https://tanaikech.github.io/2020/01/21/libraries-of-gdoctableapp-for-golang-node.js-and-python-were-updated-to-v105/</link>
      <pubDate>Tue, 21 Jan 2020 15:00:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/21/libraries-of-gdoctableapp-for-golang-node.js-and-python-were-updated-to-v105/</guid>
      <description>&lt;h2 id=&#34;libraries-of-gdoctableapp-for-golang-nodejs-and-python-were-updated-to-v105&#34;&gt;Libraries of gdoctableapp for golang, Node.js and python were updated to v1.0.5&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/go-gdoctableapp&#34;&gt;go-gdoctableapp&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/node-gdoctableapp&#34;&gt;node-gdoctableapp&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/gdoctableapppy&#34;&gt;gdoctableapppy&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;update-history&#34;&gt;Update History&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.5 (January 21, 2020)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the inline objects and tables are put in the table. An error occurred. This bug was removed by this update.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I got the pull request at &lt;a href=&#34;https://github.com/tanaikech/gdoctableapppy/pull/3&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Deleting Last Empty Page of Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/01/17/deleting-last-empty-page-of-google-document-using-google-apps-script/</link>
      <pubDate>Fri, 17 Jan 2020 15:55:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/17/deleting-last-empty-page-of-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8e018892ebb417779e9a7fedfc6a4a7d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample script for deleting the last empty page which has only one paragraph including no values which is &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt; in the Google Document using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;As a sample situation, it supposes that there is the following Google Document.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20200117a-fig1.png&#34;&#xA;     alt=&#34;Deleting Last Empty Page of Google Document using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this sample, the last page of Google Document has only one paragraph including no values which is &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;. When I try to delete only last page without modifying the previous page, I noticed that this cannot be achieved with only &lt;a href=&#34;https://developers.google.com/apps-script/reference/document&#34;&gt;Google Document service&lt;/a&gt;. For example, it try to delete the paragraph of the last page using the following scripts,&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trend of google-apps-script Tag on Stackoverflow 2020</title>
      <link>https://tanaikech.github.io/2020/01/10/trend-of-google-apps-script-tag-on-stackoverflow-2020/</link>
      <pubDate>Fri, 10 Jan 2020 10:14:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/10/trend-of-google-apps-script-tag-on-stackoverflow-2020/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fd7dbc6d630fd0550c32159635cecc96&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Published: January 10, 2020&lt;/p&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At Stackoverflow, a lot of people post the questions and answers to the questions every day. There are various tags in Stackoverflow. A lot of discussions are performed at each tag. Their discussions bring the important information and are much useful for a lot of people. As one of tags, there is &amp;ldquo;google-apps-script&amp;rdquo;. I sometimes discuss at the questions with that tag. When we see the discussions, we can notice that the discussions are changed and progressed by the time, because &amp;ldquo;Google Apps Script&amp;rdquo; which is the origin of the tag is updated. This report thinks this change as the trend of tag of &amp;ldquo;google-apps-script&amp;rdquo;. This trend includes the number of questions, questioners, answerers and tags adding to the tag of &amp;ldquo;google-apps-script&amp;rdquo;. The trend of tag of &amp;ldquo;google-apps-script&amp;rdquo; is deeply related to the progression of Google Apps Script and the various applications for Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Event ID from Event URL of Google Calendar using Google Apps Script</title>
      <link>https://tanaikech.github.io/2020/01/09/retrieving-event-id-from-event-url-of-google-calendar-using-google-apps-script/</link>
      <pubDate>Thu, 09 Jan 2020 14:13:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/09/retrieving-event-id-from-event-url-of-google-calendar-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b366be5995be04f689c3d80b18363f5e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the event ID from the event URL of Google Calendar using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The event URL is like &lt;code&gt;https://www.google.com/calendar/event?###&lt;/code&gt;. At the event URL, &lt;code&gt;###&lt;/code&gt; of &lt;code&gt;https://www.google.com/calendar/event?###&lt;/code&gt; is not the event ID. So it is required to convert it.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sample-script&#34;&gt;Sample script&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;eventUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.google.com/calendar/event?###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;eventId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;base64Decode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;eventUrl&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=&amp;#34;&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;getDataAsString&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;eventId&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Running Google Apps Script by Event Notification from Google Calendar</title>
      <link>https://tanaikech.github.io/2020/01/09/running-google-apps-script-by-event-notification-from-google-calendar/</link>
      <pubDate>Thu, 09 Jan 2020 11:19:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/09/running-google-apps-script-by-event-notification-from-google-calendar/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fbbfaa8f2a8a770424974aa16b9b6f3b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a simple method running Google Apps Script by the event notification from Google Calendar.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;There are several event triggers in Google Apps Script. &lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers&#34;&gt;Ref1&lt;/a&gt;, &lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers/installable&#34;&gt;Ref2&lt;/a&gt; There is an event trigger for Google Calendar. The official document says &lt;code&gt;An installable calendar event trigger runs when a user&#39;s calendar events are updated—created, edited, or deleted.&lt;/code&gt;. &lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers/installable#g_suite_application_triggers&#34;&gt;Ref3&lt;/a&gt; If I want to use the trigger when the event in the calendar is starts and finished, it is required to use Calendar API by preparing the URL for receiving from Google. &lt;a href=&#34;https://developers.google.com/calendar/v3/push&#34;&gt;Ref4&lt;/a&gt;, &lt;a href=&#34;https://developers.google.com/calendar/v3/reference/events/watch&#34;&gt;Ref5&lt;/a&gt; Also, there is the method that the start time are retrieved from all event lists and run the script for each start time. But in this case, it is required to check new events and manage the time-driven triggers for running the script. I thought that those are the higher hurdle for me. So I thought a workaround.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated Several CLI Tools Created By Golang</title>
      <link>https://tanaikech.github.io/2020/01/03/updated-several-cli-tools-created-by-golang/</link>
      <pubDate>Fri, 03 Jan 2020 12:39:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2020/01/03/updated-several-cli-tools-created-by-golang/</guid>
      <description>&lt;p&gt;I knew that the specification of &lt;code&gt;github.com/urfave/cli&lt;/code&gt; had been changed by the update of &lt;a href=&#34;https://github.com/urfave/cli&#34;&gt;https://github.com/urfave/cli&lt;/a&gt;. By this, when the CLI created by golang is installed with &lt;code&gt;go get&lt;/code&gt;, an error occurred. So this error was removed.&lt;/p&gt;&#xA;&lt;p&gt;The updated CLI tools are as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;goodls&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;ggsrun&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;ggsrun&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/gistwatcher&#34;&gt;gistwatcher&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/goris&#34;&gt;goris&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/gorearrange&#34;&gt;gorearrange&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/gislack&#34;&gt;gislack&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/gogauth&#34;&gt;gogauth&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Music Streaming Player for Discord with Google Drive using Node.js</title>
      <link>https://tanaikech.github.io/2019/12/25/music-streaming-player-for-discord-with-google-drive-using-node.js/</link>
      <pubDate>Wed, 25 Dec 2019 15:18:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/12/25/music-streaming-player-for-discord-with-google-drive-using-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6029cb2422dd58fe24c3a16a43ce7c35&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample script for the music streaming player for Discord with Google Drive using Node.js.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;This sample script can achieve to play the music when uses the voice channel on Discord. The music files are put in the specific folder of Google Drive. This script downloads all music files and plays the music files at the voice channel with the stream.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-register-bot-to-discord&#34;&gt;1. Register BOT to Discord&lt;/h3&gt;&#xA;&lt;p&gt;At first, please register your BOT to Discord. And please retrieve the token.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Links</title>
      <link>https://tanaikech.github.io/link/</link>
      <pubDate>Fri, 20 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://tanaikech.github.io/link/</guid>
      <description>&lt;h2 id=&#34;communities-for-google-apps-script&#34;&gt;Communities for Google Apps Script&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://groups.google.com/forum/#!forum/google-apps-script-community&#34;&gt;Google Apps Script Community&lt;/a&gt; was launched.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is also introduced at &lt;a href=&#34;https://developers.google.com/apps-script/support#discussions&#34;&gt;How to get help of official site&lt;/a&gt; like &lt;a href=&#34;https://developers.google.com/apps-script/community&#34;&gt;this&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/tagged/google-apps-script&#34;&gt;Stackoverflow&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is also introduced at &lt;a href=&#34;https://developers.google.com/apps-script/support#questions_and_advice&#34;&gt;How to get help of official site&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://developers.google.com/gsuite/solutions/&#34;&gt;new G Suite Solutions Gallery&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pulse.appsscript.info/&#34;&gt;Apps Script Pulse by Martin Hawksey&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/brucemcpherson/desktopliberation&#34;&gt;GitHub by bruce mcpherson&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://google-apps-script.slack.com/&#34;&gt;Slack by Andrew Roberts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://workspacedevs.com/&#34;&gt;Google Workspace Developers&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;useful-resources-for-google-apps-script&#34;&gt;Useful resources for Google Apps Script&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/contributorpw/google-apps-script-awesome-list&#34;&gt;Alex Ivanov&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.andrewroberts.net/scripts-and-snippets/&#34;&gt;Andrew Roberts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://ramblings.mcpher.com/Home/excelquirks&#34;&gt;Bruce McPherson&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.labnol.org/internet/google-scripts/28281/&#34;&gt;Digital Inspiration&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/gsuitedevs/apps-script-samples&#34;&gt;GSuiteDevs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/jychri/google-apps-script-cheat-sheet&#34;&gt;Jon&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Dynamically Updating Custom Menu of Google Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/12/20/dynamically-updating-custom-menu-of-google-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 20 Dec 2019 07:48:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/12/20/dynamically-updating-custom-menu-of-google-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1232a8fd1ffbd84c96ebbb97051c5b59&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for dynamically updating the custom menu of Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20191220a-fig1.gif&#34;&#xA;     alt=&#34;Dynamically Updating Custom Menu of Google Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this demonstration, when the Spreadsheet is opened, 5 functions added to the custom menu. You can see that when a column is added and deleted, the custom menu is updated.&lt;/p&gt;&#xA;&lt;h2 id=&#34;issue-and-workaround-for-this-goal&#34;&gt;Issue and workaround for this goal&lt;/h2&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, when a function is added to the custom menu with &lt;code&gt;addItem&lt;/code&gt; method, the argument cannot been able to be used. And when one of functions in the custom menu is run, the information about the function name which was run cannot be retrieved. By this, the goal cannot be directly achieved. So it is required to use the workaround.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GmailToList</title>
      <link>https://tanaikech.github.io/2019/12/17/updated-gas-library-gmailtolist/</link>
      <pubDate>Tue, 17 Dec 2019 11:40:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/12/17/updated-gas-library-gmailtolist/</guid>
      <description>&lt;h2 id=&#34;gmailtolist-was-updated-to-v101&#34;&gt;&lt;a href=&#34;https://github.com/tanaikech/GmailToList&#34;&gt;GmailToList&lt;/a&gt; was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (December 17, 2019)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/GmailToList#3-method-getattachmentfiles&#34;&gt;New method of &lt;code&gt;getAttachmentFiles()&lt;/code&gt;&lt;/a&gt; was added. The attachment files can be retrieved as blob using this method.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GmailToList&#34;&gt;https://github.com/tanaikech/GmailToList&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - GmailToList</title>
      <link>https://tanaikech.github.io/2019/12/16/gas-library-gmailtolist/</link>
      <pubDate>Mon, 16 Dec 2019 16:00:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/12/16/gas-library-gmailtolist/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a library for exporting all messages of Gmail as a list using Google Apps Script (GAS).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Recently, I have had a situation it had been required to backup all messages in own Gmail. In order to achieve this, I created a simple script. After I created it, I thought that when such situation might occur for other users and the script is published as a library, they might be useful. So I created this library. But I created this for my situation. So if this cannot be used for your environment and an error occurs, I apologize.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moving File to Specific Folder using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/11/20/moving-file-to-specific-folder-using-google-apps-script/</link>
      <pubDate>Wed, 20 Nov 2019 15:45:18 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/11/20/moving-file-to-specific-folder-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/84dd9e9f79cad87bedb45e21342c0121&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are 3 sample scripts for moving a file to the specific folder in Google Drive using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-1&#34;&gt;Sample script 1&lt;/h2&gt;&#xA;&lt;p&gt;In this script, only Drive Service is used.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sourceFileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;destinationFolderId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sourceFileId&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFolderById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;destinationFolderId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;addFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;getParents&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;next&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;removeFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-script-2&#34;&gt;Sample script 2&lt;/h2&gt;&#xA;&lt;p&gt;In this script, only Drive API at Advanced Google services. (In this case, it&amp;rsquo;s Drive API v2.)&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sourceFileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;destinationFolderId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Drive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;parents&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [{ &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;destinationFolderId&lt;/span&gt; }] }, &lt;span style=&#34;color:#a6e22e&#34;&gt;sourceFileId&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-script-3&#34;&gt;Sample script 3&lt;/h2&gt;&#xA;&lt;p&gt;In this script, only Drive API v3 is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Figma to Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/11/11/figma-to-google-slides-using-google-apps-script/</link>
      <pubDate>Mon, 11 Nov 2019 14:43:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/11/11/figma-to-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6aeb3ff13765cfba465862e2e2c3dd3b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, all pages in the Figma file are retrieved and the retrieved pages are put to new Google Slides as the image.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-retrieve-access-token&#34;&gt;1. Retrieve access token&lt;/h3&gt;&#xA;&lt;p&gt;You can see the method for retrieving the access token at &lt;a href=&#34;https://www.figma.com/developers/api#access-tokens&#34;&gt;here&lt;/a&gt;. Although there is also OAuth2 for retrieving the access token, in your situation, I thought that the method for directly generating the access token on the site might be suitable. So in this answer, the generated access token on the site is used. Please retrieve the access token as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Values from Sheet Filtered by Slicer in Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/11/08/retrieving-values-from-sheet-filtered-by-slicer-in-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 08 Nov 2019 16:13:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/11/08/retrieving-values-from-sheet-filtered-by-slicer-in-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7cc9efb29ba6063da04f81e50d858f52&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample script for retrieving values from a sheet filtered by Slicer in Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;By &lt;a href=&#34;https://developers.google.com/apps-script/releases/#november_6_2019&#34;&gt;the update of Google side at November 6, 2019&lt;/a&gt;, &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/slicer&#34;&gt;Class Slicer&lt;/a&gt; was added. And also, for Sheets API, &lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#addslicerrequest&#34;&gt;AddSlicerRequest&lt;/a&gt; and &lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#updateslicerspecrequest&#34;&gt;UpdateSlicerSpecRequest&lt;/a&gt; were added. By this, Slicer of Spreadsheet got to be able to be managed with Google Apps Script and other languages.&lt;/p&gt;&#xA;&lt;p&gt;Here, I would like to introduce the method for retrieving values from a sheet filtered by Slicer in Spreadsheet using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v123</title>
      <link>https://tanaikech.github.io/2019/10/31/updated-goodls-to-v123/</link>
      <pubDate>Thu, 31 Oct 2019 08:19:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/10/31/updated-goodls-to-v123/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.3 (October 31, 2019)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;An option for inputting the directory to save the downloaded files was added.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$ goodls -u [URL] -d [directory]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatic Recalculation of Custom Function on Spreadsheet Part 2</title>
      <link>https://tanaikech.github.io/2019/10/28/automatic-recalculation-of-custom-function-on-spreadsheet-part-2/</link>
      <pubDate>Mon, 28 Oct 2019 08:09:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/10/28/automatic-recalculation-of-custom-function-on-spreadsheet-part-2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cb5447616bfc6a01de8a49131c0d2db0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;I have already reported about &amp;ldquo;Automatic Recalculation of Custom Function on Spreadsheet Part 1&amp;rdquo; at &lt;a href=&#34;https://gist.github.com/tanaikech/b8ea7bd7fd87bcd7bb28ddede1781889&#34;&gt;here&lt;/a&gt;. Here, I would like to introduce other workaround for forcibly recalculating the custom functions and built-in functions using Class TextFinder. &lt;a href=&#34;https://developers.google.com/apps-script/releases/#april_5_2019&#34;&gt;Class TextFinder has added at April 5, 2019.&lt;/a&gt; By this, this workaround can be proposed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-scripts&#34;&gt;Sample scripts&lt;/h2&gt;&#xA;&lt;h3 id=&#34;pattern-1&#34;&gt;Pattern 1&lt;/h3&gt;&#xA;&lt;p&gt;If you want to refresh all functions of all sheets in a Spreadsheet, you can use the following script. In this script, when the script is run, all built-in functions and custom functions in the Spreadsheet are refreshed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - GetEditType</title>
      <link>https://tanaikech.github.io/2019/10/25/updated-gas-library-getedittype/</link>
      <pubDate>Fri, 25 Oct 2019 10:27:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/10/25/updated-gas-library-getedittype/</guid>
      <description>&lt;h2 id=&#34;getedittype-was-updated-to-v101&#34;&gt;&lt;a href=&#34;https://github.com/tanaikech/GetEditType&#34;&gt;GetEditType&lt;/a&gt; was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (October 25, 2019)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Updated: &lt;a href=&#34;https://stackoverflow.com/a/58499090&#34;&gt;This answer&lt;/a&gt; was reflected.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GetEditType&#34;&gt;https://github.com/tanaikech/GetEditType&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ZipFolder</title>
      <link>https://tanaikech.github.io/2019/10/15/updated-gas-library-zipfolder/</link>
      <pubDate>Tue, 15 Oct 2019 14:33:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/10/15/updated-gas-library-zipfolder/</guid>
      <description>&lt;h2 id=&#34;zipfolder-was-updated-to-v101&#34;&gt;&lt;a href=&#34;https://github.com/tanaikech/ZipFolder&#34;&gt;ZipFolder&lt;/a&gt; was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (October 15, 2019)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ZipFolder#option-for-preventing-the-duplicated-filenames-when-the-google-docs-is-converted&#34;&gt;The option for preventing the duplicated filenames when the Google Docs is converted was added.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/ZipFolder&#34;&gt;https://github.com/tanaikech/ZipFolder&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resumable Upload of Multiple Files with Asynchronous Process for Google Drive</title>
      <link>https://tanaikech.github.io/2019/10/14/resumable-upload-of-multiple-files-with-asynchronous-process-for-google-drive/</link>
      <pubDate>Mon, 14 Oct 2019 11:06:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/10/14/resumable-upload-of-multiple-files-with-asynchronous-process-for-google-drive/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a sample script for uploading multiple files with large size (&amp;gt; 50 MB) at the sidebar, dialog of Google Docs and Web Apps using the resumable upload of the asynchronous process with Javascript and Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;h1 id=&#34;demo&#34;&gt;Demo&lt;/h1&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/AsynchronousResumableUploadForGoogleDrive/raw/master/images/demo.gif&#34;&#xA;     alt=&#34;Resumable Upload of Multiple Files with Asynchronous Process for Google Drive&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a demonstration of this script. As a demonstration, it uploads 5 files with the size of 100 MB to own Google Drive. When the files were selected and the upload button is clicked, those are uploaded by &lt;a href=&#34;https://developers.google.com/drive/api/v3/manage-uploads#resumable&#34;&gt;the resumable upload&lt;/a&gt; with the asynchronous process. It is found that the files can be completely uploaded with the asynchronous process. In this demo, as a test case, the chunk size of 20 MB was used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Javascript library - ResumableUploadForGoogleDrive_js</title>
      <link>https://tanaikech.github.io/2019/10/11/javascript-library-resumableuploadforgoogledrive_js/</link>
      <pubDate>Fri, 11 Oct 2019 13:07:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/10/11/javascript-library-resumableuploadforgoogledrive_js/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Javascript library to achieve the resumable upload for Google Drive.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When a file more than 5 MB is uploaded to Google Drive with Drive API, &lt;a href=&#34;https://developers.google.com/drive/api/v3/manage-uploads#resumable&#34;&gt;the resumable upload&lt;/a&gt; is required to be used. I have already published the sample script for &amp;ldquo;Resumable Upload for Web Apps using Google Apps Script&amp;rdquo;. &lt;a href=&#34;https://github.com/tanaikech/Resumable_Upload_For_WebApps&#34;&gt;Ref&lt;/a&gt; In this case, Web Apps is used. Here, I would like to introduce the script for the resumable upload created by only Javascript. Unfortunately, in the current stage, at &lt;a href=&#34;https://github.com/google/google-api-javascript-client&#34;&gt;google-api-javascript-client&lt;/a&gt;, there are no methods for the resumable upload. And, I thought that when this function is created as a Javascript library, it might be useful for users. Also that library is also useful for me. So I created this. If this was useful for your situation, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>One Time Download for Google Drive</title>
      <link>https://tanaikech.github.io/2019/10/04/one-time-download-for-google-drive/</link>
      <pubDate>Fri, 04 Oct 2019 11:59:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/10/04/one-time-download-for-google-drive/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample script for downloading files from Google Drive by the one time download method.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When you download a file from Google Drive, in generally, the login and the access token are required. If you want to download the file without the authorization for the simple situation, the file is required to be publicly shared. But the file might not be able to be shared publicly, because of various reasons.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Javascript library - GetFileList_js</title>
      <link>https://tanaikech.github.io/2019/09/30/updated-javascript-library-getfilelist_js/</link>
      <pubDate>Mon, 30 Sep 2019 11:35:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/09/30/updated-javascript-library-getfilelist_js/</guid>
      <description>&lt;h2 id=&#34;getfilelist_-was-updated-to-v101&#34;&gt;&lt;a href=&#34;https://github.com/tanaikech/GetFileList_js&#34;&gt;GetFileList_js&lt;/a&gt; was updated to v1.0.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (September 30, 2019)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A bug related to the scope of variables was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/GetFileList_js&#34;&gt;https://github.com/tanaikech/GetFileList_js&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RunAll</title>
      <link>https://tanaikech.github.io/2019/09/20/updated-gas-library-runall/</link>
      <pubDate>Fri, 20 Sep 2019 10:43:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/09/20/updated-gas-library-runall/</guid>
      <description>&lt;h2 id=&#34;runall-was-updated-to-v111&#34;&gt;&lt;a href=&#34;https://github.com/tanaikech/RunAll&#34;&gt;RunAll&lt;/a&gt; was updated to v1.1.1.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.1 (September 20, 2019)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When the number of &lt;code&gt;0&lt;/code&gt; was used as the argument, &lt;code&gt;null&lt;/code&gt; was returned. This bug was removed.&lt;/li&gt;&#xA;&lt;li&gt;Coffeescript as the source was updated.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RunAll&#34;&gt;https://github.com/tanaikech/RunAll&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modifying Revisions of a File on Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/09/16/modifying-revisions-of-a-file-on-google-drive-using-google-apps-script/</link>
      <pubDate>Mon, 16 Sep 2019 15:50:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/09/16/modifying-revisions-of-a-file-on-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9508a9007c1a5196e4b234ea40528f96&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for modifying the revisions of a file on Google Drive using Google Apps Script. This script can be used for not only Google Docs files, but also the files except for Google Docs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;issue-and-workaround&#34;&gt;Issue and workaround:&lt;/h2&gt;&#xA;&lt;p&gt;Unfortunately, in the current stage, at Google Docs files, the revision of Google Docs cannot be directly changed by APIs with a script. So as one of several workarounds, I would like to propose to overwrite the Google Docs file using the exported data. On the other hand, at the files except for Google Docs, the data can be directly retrieved with the revision ID. This can be used for overwriting the file. The flow of this script is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Javascript library - syncGoogleScriptRun</title>
      <link>https://tanaikech.github.io/2019/09/13/javascript-library-syncgooglescriptrun/</link>
      <pubDate>Fri, 13 Sep 2019 14:54:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/09/13/javascript-library-syncgooglescriptrun/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a Javascript library to use &amp;ldquo;google.script.run&amp;rdquo; with the synchronous process.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When I create Web Apps, add-on using a side bar and dialog, there is the case that I want to use &lt;code&gt;google.script.run&lt;/code&gt; with the synchronous process. As you know, &lt;a href=&#34;https://developers.google.com/apps-script/guides/html/reference/run&#34;&gt;&lt;code&gt;google.script.run&lt;/code&gt; works with the asynchronous process&lt;/a&gt;. So in order to use it as the synchronous process, the script is required to be prepared. I also saw several issues for such situation at Stackoverflow and other sites. I thought that when the script for achieving this was prepared as a library, it might be useful for users. So I created this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Javascript library - GetFileList_js</title>
      <link>https://tanaikech.github.io/2019/09/12/javascript-library-getfilelist_js/</link>
      <pubDate>Thu, 12 Sep 2019 14:44:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/09/12/javascript-library-getfilelist_js/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Javascript library to retrieve the file list with the folder tree from the specific folder (publicly shared folders and own folders) of Google Drive.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;The library for retrieving the file list with the folder tree from the specific folder of Google Drive has already been published for Google Apps Script, golang, node.js and python as GetFileList. &lt;a href=&#34;https://gist.github.com/tanaikech/4fca197b8ec45c8ac6300b1531c2489d&#34;&gt;Ref&lt;/a&gt; Here, this GetFileList was released as the library of Javascript.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Importing CSV Data to Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/08/28/benchmark-importing-csv-data-to-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 28 Aug 2019 12:01:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/08/28/benchmark-importing-csv-data-to-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/030203c695b308606041587e6da269e7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;top&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;center&gt;&#xD;&#xA;August 28, 2019&#xD;&#xA;    Published.&#xD;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please be careful! This result can be only used for Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are a limit executing time for Google Apps Script (GAS). That is 6 minutes for Consumer and Google Apps free edition, and 30 minutes for G Suite and Early Access. &lt;a href=&#34;#references&#34;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; So many users always have to pay attention to reducing the process cost of scripts. So it is very important to know the process cost of various situations. I have already reported the costs for various processes as the reports. &lt;a href=&#34;#references&#34;&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; In this report, the process cost for importing CSV data to Spreadsheet using GAS has been investigated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Functions by Specifying Function Names with Web Apps for Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/08/26/running-functions-by-specifying-function-names-with-web-apps-for-google-apps-script/</link>
      <pubDate>Mon, 26 Aug 2019 17:55:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/08/26/running-functions-by-specifying-function-names-with-web-apps-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b2e0325a28efe7c609e4688ec22ee22c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this report, I would like to introduce the method for running functions by directly specifying the function names with Web Apps for Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;It has already been known that the directly specified functions in the project can be run from the outside by enabling &amp;ldquo;API executable&amp;rdquo; and using the method of &lt;a href=&#34;https://developers.google.com/apps-script/api/reference/rest/v1/scripts&#34;&gt;scripts.run&lt;/a&gt; in Google Apps Script API. In this case, the installation for using Apps Script API is a bit complicate. I think that this is making users difficult to use Apps Script API, although the important settings are including in the installation when the importance of the security is considered. As one of workarounds for making easy to run the directly specified functions in the project, I would like to introduce the method using Web Apps. When Web Apps is accessed, the functions of &lt;code&gt;doGet()&lt;/code&gt; and &lt;code&gt;doPost()&lt;/code&gt; are used. These are the reserved function name. But, when this method is used, the functions in the project can be run by directly selecting from the outside.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RunAll</title>
      <link>https://tanaikech.github.io/2019/08/26/updated-gas-library-runall/</link>
      <pubDate>Mon, 26 Aug 2019 17:40:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/08/26/updated-gas-library-runall/</guid>
      <description>&lt;h2 id=&#34;runall-was-updated-to-v110&#34;&gt;&lt;a href=&#34;https://github.com/tanaikech/RunAll&#34;&gt;RunAll&lt;/a&gt; was updated to v1.1.0.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.0 (August 26, 2019)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/RunAll#2-parallel-processing-with-web-apps&#34;&gt;New method for achieving the parallel processing with Web Apps was added.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/RunAll&#34;&gt;https://github.com/tanaikech/RunAll&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: python library - getfilelistpy</title>
      <link>https://tanaikech.github.io/2019/08/23/updated-python-library-getfilelistpy/</link>
      <pubDate>Fri, 23 Aug 2019 15:20:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/08/23/updated-python-library-getfilelistpy/</guid>
      <description>&lt;h2 id=&#34;python-library---getfilelistpy-was-updated-to-v104&#34;&gt;python library - getfilelistpy was updated to v1.0.4.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.4 (August 23, 2019)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For OAuth2, &lt;code&gt;oauth2client&lt;/code&gt; and &lt;code&gt;google_auth_oauthlib&lt;/code&gt; got to be able to be used. About the sample script for &lt;code&gt;google_auth_oauthlib&lt;/code&gt;, please see &lt;a href=&#34;https://github.com/tanaikech/getfilelistpy#googleauthoauthlibsample&#34;&gt;this&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check getfilelistpy at &lt;a href=&#34;https://github.com/tanaikech/getfilelistpy&#34;&gt;https://github.com/tanaikech/getfilelistpy&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can also check getfilelistpy at &lt;a href=&#34;https://pypi.org/project/getfilelistpy/&#34;&gt;https://pypi.org/project/getfilelistpy/&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Examples of How to Derive a Signing Key for Signature Version 4 (AWS) for Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/08/11/examples-of-how-to-derive-a-signing-key-for-signature-version-4-aws-for-google-apps-script/</link>
      <pubDate>Sun, 11 Aug 2019 16:15:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/08/11/examples-of-how-to-derive-a-signing-key-for-signature-version-4-aws-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/97a2787db7be94180a64e1f4c194d415&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for &amp;ldquo;&lt;a href=&#34;https://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html&#34;&gt;Examples of How to Derive a Signing Key for Signature Version 4&lt;/a&gt;&amp;rdquo; using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In order to use &lt;a href=&#34;https://aws.amazon.com/tools/#sdk&#34;&gt;AWS SDKs&lt;/a&gt;, there are the sample scripts for the languages of Java, .NET (C#), Python, Ruby, JavaScript (Node.js). But the sample script of Google Apps Script is not prepared. I saw &lt;a href=&#34;https://stackoverflow.com/q/57439671&#34;&gt;the question&lt;/a&gt; related to this at Stackoverflow. So I would like to also introduce the sample script here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated gonetatmo to v101</title>
      <link>https://tanaikech.github.io/2019/08/02/updated-gonetatmo-to-v101/</link>
      <pubDate>Fri, 02 Aug 2019 16:02:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/08/02/updated-gonetatmo-to-v101/</guid>
      <description>&lt;h2 id=&#34;gonetatmo-was-updated-to-v101&#34;&gt;gonetatmo was updated to v.1.0.1&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (August 2, 2019)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A bug was removed.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the outer module is not active, an error occurred. In this version, this bug was removed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check gonetatmo at &lt;a href=&#34;https://github.com/tanaikech/gonetatmo&#34;&gt;https://github.com/tanaikech/gonetatmo&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parsing HTML using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/08/01/parsing-html-using-google-apps-script/</link>
      <pubDate>Thu, 01 Aug 2019 14:04:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/08/01/parsing-html-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e85193a89d041fed6122583739309786&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for parsing HTML using Google Apps Script. When HTML data is converted to Google Document, the HTML data can be parsed and be converted to Google Document. In this case, the paragraphs, lists and tables are included. From this situation, I thought that this situation can be used for parsing HTML using Google Apps Script. So I could came up with this method.&lt;/p&gt;&#xA;&lt;p&gt;In the Sheet API, the HTML data can be put to the Spreadsheet with the PasteDataRequest. But unfortunately, in this case, I couldn&amp;rsquo;t distinguish between the body and tables.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Values from Filtered Sheet in Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/07/28/retrieving-values-from-filtered-sheet-in-spreadsheet-using-google-apps-script/</link>
      <pubDate>Sun, 28 Jul 2019 17:05:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/28/retrieving-values-from-filtered-sheet-in-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/053d3ebbe76fa7c0b5e80ea9d6396011&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving values from filtered Sheet in Spreadsheet using Google Apps Script. When the values are retrieved the filtered sheet by the basic filter, if &lt;code&gt;setValues()&lt;/code&gt; and &lt;code&gt;setDisplayValues()&lt;/code&gt; are used, all values without the filter are retrieved. In this script, I would like to introduce the method for retrieving the values from the filtered sheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In order to retrieve the values from the filtered sheet, one method has already been proposed. That method retrieved the values from the filtered sheet by retrieving &lt;code&gt;columnMetadata&lt;/code&gt; and &lt;code&gt;rowMetadata&lt;/code&gt; of the method of spreadsheet.get of Sheets API. In this case, the rows and columns hidden by the filter can be retrieved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - UnzipGs</title>
      <link>https://tanaikech.github.io/2019/07/26/gas-library-unzipgs/</link>
      <pubDate>Fri, 26 Jul 2019 13:49:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/26/gas-library-unzipgs/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a GAS library for unzipping a Zip file protected by a password using Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Recently, I had a situation that it is required to unzip a Zip file protected with the password. But unfortunately, in the current stage, the method of &lt;a href=&#34;https://developers.google.com/apps-script/reference/utilities/utilities#unzipblob&#34;&gt;&lt;code&gt;Utilities.unzip()&lt;/code&gt;&lt;/a&gt; cannot unzip such protected files. So when I had been looking for the other workarounds, I found &lt;a href=&#34;https://github.com/imaya/zlib.js&#34;&gt;&lt;code&gt;zlib.js&lt;/code&gt;&lt;/a&gt;. Especially, it&amp;rsquo;s &lt;a href=&#34;https://github.com/imaya/zlib.js/blob/develop/bin/unzip.min.js&#34;&gt;&lt;code&gt;unzip.min.js&lt;/code&gt;&lt;/a&gt;. This is created for Javascript. So when I used this using Google Apps Script, it was found that it didn&amp;rsquo;t work for Google Apps Script. So I prepared a wrapper script for running it with Google Apps Script. And when I created the wrapper script, I thought that under the current stage, if the protected Zip file can be unzipped, this will be useful for other users. So I created this as a GAS library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resumable Uploading Files to Google Drive using Golang</title>
      <link>https://tanaikech.github.io/2019/07/23/resumable-uploading-files-to-google-drive-using-golang/</link>
      <pubDate>Tue, 23 Jul 2019 15:11:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/23/resumable-uploading-files-to-google-drive-using-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/19655a8130bac1ba510b29c9c44bbd97&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for the resumable upload of Files to Google Drive using Golang. This script uses the library of &lt;a href=&#34;https://github.com/googleapis/google-api-go-client&#34;&gt;google-api-go-client&lt;/a&gt;. About the installation of google-api-go-client, please check &lt;a href=&#34;https://developers.google.com/docs/api/quickstart/go&#34;&gt;the Quickstart&lt;/a&gt; for golang at the official site.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script:&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xD;&#xA;&#xD;&#xA;import (&#xD;&#xA;&#x9;&amp;#34;context&amp;#34;&#xD;&#xA;&#x9;&amp;#34;encoding/json&amp;#34;&#xD;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xD;&#xA;&#x9;&amp;#34;io/ioutil&amp;#34;&#xD;&#xA;&#x9;&amp;#34;log&amp;#34;&#xD;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xD;&#xA;&#x9;&amp;#34;os&amp;#34;&#xD;&#xA;&#xD;&#xA;&#x9;drive &amp;#34;google.golang.org/api/drive/v3&amp;#34;&#xD;&#xA;&#xD;&#xA;&#x9;&amp;#34;golang.org/x/oauth2&amp;#34;&#xD;&#xA;&#x9;&amp;#34;golang.org/x/oauth2/google&amp;#34;&#xD;&#xA;&#x9;&amp;#34;golang.org/x/oauth2/jwt&amp;#34;&#xD;&#xA;)&#xD;&#xA;&#xD;&#xA;// ServiceAccount : Use Service account&#xD;&#xA;func ServiceAccount(credentialFile string) *http.Client {&#xD;&#xA;&#x9;b, err := ioutil.ReadFile(credentialFile)&#xD;&#xA;&#x9;if err != nil {&#xD;&#xA;&#x9;&#x9;log.Fatal(err)&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;var c = struct {&#xD;&#xA;&#x9;&#x9;Email      string `json:&amp;#34;client_email&amp;#34;`&#xD;&#xA;&#x9;&#x9;PrivateKey string `json:&amp;#34;private_key&amp;#34;`&#xD;&#xA;&#x9;}{}&#xD;&#xA;&#x9;json.Unmarshal(b, &amp;amp;c)&#xD;&#xA;&#x9;config := &amp;amp;jwt.Config{&#xD;&#xA;&#x9;&#x9;Email:      c.Email,&#xD;&#xA;&#x9;&#x9;PrivateKey: []byte(c.PrivateKey),&#xD;&#xA;&#x9;&#x9;Scopes: []string{&#xD;&#xA;&#x9;&#x9;&#x9;drive.DriveScope,&#xD;&#xA;&#x9;&#x9;},&#xD;&#xA;&#x9;&#x9;TokenURL: google.JWTTokenURL,&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;client := config.Client(oauth2.NoContext)&#xD;&#xA;&#x9;return client&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;func main() {&#xD;&#xA;&#x9;filename := &amp;#34;sample.txt&amp;#34;     // Filename&#xD;&#xA;&#x9;baseMimeType := &amp;#34;text/plain&amp;#34; // MimeType&#xD;&#xA;&#x9;client := ServiceAccount(&amp;#34;credential.json&amp;#34;) // Please set the json file of Service account.&#xD;&#xA;&#xD;&#xA;&#x9;srv, err := drive.New(client)&#xD;&#xA;&#x9;if err != nil {&#xD;&#xA;&#x9;&#x9;log.Fatalln(err)&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;file, err := os.Open(filename)&#xD;&#xA;&#x9;if err != nil {&#xD;&#xA;&#x9;&#x9;log.Fatalln(err)&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;fileInf, err := file.Stat()&#xD;&#xA;&#x9;if err != nil {&#xD;&#xA;&#x9;&#x9;log.Fatalln(err)&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;defer file.Close()&#xD;&#xA;&#x9;f := &amp;amp;drive.File{Name: filename}&#xD;&#xA;&#x9;res, err := srv.Files.&#xD;&#xA;&#x9;&#x9;Create(f).&#xD;&#xA;&#x9;&#x9;ResumableMedia(context.Background(), file, fileInf.Size(), baseMimeType).&#xD;&#xA;&#x9;&#x9;ProgressUpdater(func(now, size int64) { fmt.Printf(&amp;#34;%d, %d\r&amp;#34;, now, size) }).&#xD;&#xA;&#x9;&#x9;Do()&#xD;&#xA;&#x9;if err != nil {&#xD;&#xA;&#x9;&#x9;log.Fatalln(err)&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;fmt.Printf(&amp;#34;%s\n&amp;#34;, res.Id)&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;note&#34;&gt;Note:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In this sample, the Service account is used. So the file is uploaded to the Service account&amp;rsquo;s Drive. When &lt;code&gt;client&lt;/code&gt; retrieved from OAuth2 is used, the file is uploaded to owner&amp;rsquo;s Drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/googleapis/google-api-go-client/blob/master/drive/v3/drive-gen.go&#34;&gt;google-api-go-client&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://godoc.org/google.golang.org/api/drive/v3&#34;&gt;package drive&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Creating a Table to Google Document by Retrieving Values from Google Spreadsheet for Python</title>
      <link>https://tanaikech.github.io/2019/07/21/creating-a-table-to-google-document-by-retrieving-values-from-google-spreadsheet-for-python/</link>
      <pubDate>Sun, 21 Jul 2019 14:27:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/21/creating-a-table-to-google-document-by-retrieving-values-from-google-spreadsheet-for-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/305e413696bcdf3a2ee3e86cebf3c7dc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating a table to Google Document by retrieving values from Google Spreadsheet for Python.&lt;/p&gt;&#xA;&lt;p&gt;Before you use this script, please install python library of &lt;a href=&#34;https://github.com/tanaikech/gdoctableapppy&#34;&gt;gdoctableapppy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ pip install gdoctableapppy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script:&lt;/h2&gt;&#xA;&lt;p&gt;This sample script uses Service Account.&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, the values are retrieved from &lt;code&gt;Sheet1!A1:C5&lt;/code&gt; of Spreadsheet, and new table is created to the Document using the values.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; google.oauth2 &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; service_account&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; gdoctableapppy &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; gdoctableapp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; googleapiclient.discovery &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SCOPES &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.googleapis.com/auth/documents&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.googleapis.com/auth/spreadsheets&amp;#39;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SERVICE_ACCOUNT_FILE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;credential.json&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Please set the json file of Service account.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;creds &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; service_account&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Credentials&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;from_service_account_file(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    SERVICE_ACCOUNT_FILE, scopes&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;SCOPES)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;service &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; build(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sheets&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;v4&amp;#39;&lt;/span&gt;, credentials&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;creds)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;spreadsheet_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;###&amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# Please set here&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;document_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;###&amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# Please set here&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; service&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;spreadsheets()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;values()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    spreadsheetId&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;spreadsheet_id, range&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Sheet1!A1:C5&amp;#39;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;execute()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;values &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; res[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;values&amp;#39;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;resource &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;service_account&amp;#34;&lt;/span&gt;: creds,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;documentId&amp;#34;&lt;/span&gt;: document_id,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rows&amp;#34;&lt;/span&gt;: len(values),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;columns&amp;#34;&lt;/span&gt;: len(values[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;append&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;values&amp;#34;&lt;/span&gt;: values&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; gdoctableapp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CreateTable(resource)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(res)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/gdoctableapppy&#34;&gt;gdoctableapppy&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/identity/protocols/OAuth2ServiceAccount&#34;&gt;Service account&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Creating a Table to Google Document by Retrieving Values from Google Spreadsheet for Node.js</title>
      <link>https://tanaikech.github.io/2019/07/21/creating-a-table-to-google-document-by-retrieving-values-from-google-spreadsheet-for-node.js/</link>
      <pubDate>Sun, 21 Jul 2019 11:25:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/21/creating-a-table-to-google-document-by-retrieving-values-from-google-spreadsheet-for-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e64342de7011228f5fb639d7d1123ebb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating a table to Google Document by retrieving values from Google Spreadsheet for Node.js.&lt;/p&gt;&#xA;&lt;p&gt;Before you use this script, please install Node.js module of &lt;a href=&#34;https://github.com/tanaikech/node-gdoctableapp&#34;&gt;node-gdoctableapp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ npm install --save-dev gdoctableapp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ npm install --global gdoctableapp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script:&lt;/h2&gt;&#xA;&lt;p&gt;This sample script uses Service Account.&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, the values are retrieved from &lt;code&gt;Sheet1!A1:C5&lt;/code&gt; of Spreadsheet, and new table is created to the Document using the values.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a Table to Google Document by Retrieving Values from Google Spreadsheet for Golang</title>
      <link>https://tanaikech.github.io/2019/07/18/creating-a-table-to-google-document-by-retrieving-values-from-google-spreadsheet-for-golang/</link>
      <pubDate>Thu, 18 Jul 2019 13:49:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/18/creating-a-table-to-google-document-by-retrieving-values-from-google-spreadsheet-for-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0589a673cae9569181def8ccd10793cf&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating a table to Google Document by retrieving values from Google Spreadsheet for Golang.&lt;/p&gt;&#xA;&lt;p&gt;Before you use this script, please install go library of &lt;a href=&#34;https://github.com/tanaikech/go-gdoctableapp&#34;&gt;go-gdoctableapp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ go get -v -u github.com/tanaikech/go-gdoctableapp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script:&lt;/h2&gt;&#xA;&lt;p&gt;This sample script uses Service Account.&lt;/p&gt;&#xA;&lt;p&gt;In this sample script, the values are retrieved from &lt;code&gt;Sheet1!A1:C5&lt;/code&gt; of Spreadsheet, and new table is created to the Document using the values.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xD;&#xA;&#xD;&#xA;import (&#xD;&#xA;&#x9;&amp;#34;encoding/json&amp;#34;&#xD;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xD;&#xA;&#x9;&amp;#34;io/ioutil&amp;#34;&#xD;&#xA;&#x9;&amp;#34;log&amp;#34;&#xD;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xD;&#xA;&#x9;&amp;#34;os&amp;#34;&#xD;&#xA;&#xD;&#xA;&#x9;gdoctableapp &amp;#34;github.com/tanaikech/go-gdoctableapp&amp;#34;&#xD;&#xA;&#x9;&amp;#34;golang.org/x/oauth2&amp;#34;&#xD;&#xA;&#x9;&amp;#34;golang.org/x/oauth2/google&amp;#34;&#xD;&#xA;&#x9;&amp;#34;golang.org/x/oauth2/jwt&amp;#34;&#xD;&#xA;&#x9;docs &amp;#34;google.golang.org/api/docs/v1&amp;#34;&#xD;&#xA;&#x9;sheets &amp;#34;google.golang.org/api/sheets/v4&amp;#34;&#xD;&#xA;)&#xD;&#xA;&#xD;&#xA;// ServiceAccount : Use Service account&#xD;&#xA;func ServiceAccount(credentialFile string) *http.Client {&#xD;&#xA;&#x9;b, err := ioutil.ReadFile(credentialFile)&#xD;&#xA;&#x9;if err != nil {&#xD;&#xA;&#x9;&#x9;log.Fatal(err)&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;var c = struct {&#xD;&#xA;&#x9;&#x9;Email      string `json:&amp;#34;client_email&amp;#34;`&#xD;&#xA;&#x9;&#x9;PrivateKey string `json:&amp;#34;private_key&amp;#34;`&#xD;&#xA;&#x9;}{}&#xD;&#xA;&#x9;json.Unmarshal(b, &amp;amp;c)&#xD;&#xA;&#x9;config := &amp;amp;jwt.Config{&#xD;&#xA;&#x9;&#x9;Email:      c.Email,&#xD;&#xA;&#x9;&#x9;PrivateKey: []byte(c.PrivateKey),&#xD;&#xA;&#x9;&#x9;Scopes: []string{&#xD;&#xA;&#x9;&#x9;&#x9;docs.DocumentsScope,&#xD;&#xA;&#x9;&#x9;&#x9;sheets.SpreadsheetsScope,&#xD;&#xA;&#x9;&#x9;},&#xD;&#xA;&#x9;&#x9;TokenURL: google.JWTTokenURL,&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;client := config.Client(oauth2.NoContext)&#xD;&#xA;&#x9;return client&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;func main() {&#xD;&#xA;&#x9;spreadsheetID := &amp;#34;###&amp;#34; // Please set here&#xD;&#xA;&#x9;documentID := &amp;#34;###&amp;#34;    // Please set here&#xD;&#xA;&#xD;&#xA;&#x9;client := ServiceAccount(&amp;#34;credential.json&amp;#34;) // Please set the json file of Service account.&#xD;&#xA;&#x9;srv, err := sheets.New(client)&#xD;&#xA;&#x9;if err != nil {&#xD;&#xA;&#x9;&#x9;log.Fatalf(&amp;#34;%v&amp;#34;, err)&#xD;&#xA;&#x9;}&#xD;&#xA;&#xD;&#xA;&#x9;// Retrieve values from Spreadsheet.&#xD;&#xA;&#x9;sheetValues, err := srv.Spreadsheets.Values.Get(spreadsheetID, &amp;#34;Sheet1!A1:C5&amp;#34;).Do()&#xD;&#xA;&#x9;if err != nil {&#xD;&#xA;&#x9;&#x9;log.Fatalf(&amp;#34;%v&amp;#34;, err)&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;values := sheetValues.Values&#xD;&#xA;&#xD;&#xA;&#x9;// Put the retrieved values to Document.&#xD;&#xA;&#x9;g := gdoctableapp.New()&#xD;&#xA;&#x9;obj := &amp;amp;gdoctableapp.CreateTableRequest{&#xD;&#xA;&#x9;&#x9;Rows:    int64(len(values)),&#xD;&#xA;&#x9;&#x9;Columns: int64(len(values[0])),&#xD;&#xA;&#x9;&#x9;Append:  true,&#xD;&#xA;&#x9;&#x9;Values:  values,&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;res, err := g.Docs(documentID).CreateTable(obj).Do(client)&#xD;&#xA;&#x9;if err != nil {&#xD;&#xA;&#x9;&#x9;log.Fatalf(&amp;#34;%v&amp;#34;, err)&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;fmt.Println(res)&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;references&#34;&gt;References:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/go-gdoctableapp&#34;&gt;go-gdoctableapp&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/identity/protocols/OAuth2ServiceAccount&#34;&gt;Service account&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>python library - gdoctableapppy</title>
      <link>https://tanaikech.github.io/2019/07/18/python-library-gdoctableapppy/</link>
      <pubDate>Thu, 18 Jul 2019 11:46:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/18/python-library-gdoctableapppy/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a python library to manage the tables on Google Document using Google Docs API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Google Docs API has been released. When I used this API, I found that it is very difficult for me to manage the tables on Google Document using Google Docs API. Although I checked &lt;a href=&#34;https://developers.google.com/docs/api/how-tos/tables&#34;&gt;the official document&lt;/a&gt;, unfortunately, I thought that it&amp;rsquo;s very difficult for me. So in order to easily manage the tables on Google Document, I created this library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>node module - node-gdoctableapp</title>
      <link>https://tanaikech.github.io/2019/07/18/node-module-node-gdoctableapp/</link>
      <pubDate>Thu, 18 Jul 2019 11:44:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/18/node-module-node-gdoctableapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Node.js module to manage the tables on Google Document using Google Docs API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Google Docs API has been released. When I used this API, I found that it is very difficult for me to manage the tables on Google Document using Google Docs API. Although I checked &lt;a href=&#34;https://developers.google.com/docs/api/how-tos/tables&#34;&gt;the official document&lt;/a&gt;, unfortunately, I thought that it&amp;rsquo;s very difficult for me. So in order to easily manage the tables on Google Document, I created this library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Library - go-gdoctableapp</title>
      <link>https://tanaikech.github.io/2019/07/18/go-library-go-gdoctableapp/</link>
      <pubDate>Thu, 18 Jul 2019 11:40:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/18/go-library-go-gdoctableapp/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Golang library for managing tables on Google Document using Google Docs API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;Google Docs API has been released. When I used this API, I found that it is very difficult for me to manage the tables on Google Document using Google Docs API. Although I checked &lt;a href=&#34;https://developers.google.com/docs/api/how-tos/tables&#34;&gt;the official document&lt;/a&gt;, unfortunately, I thought that it&amp;rsquo;s very difficult for me. So in order to easily manage the tables on Google Document, I created this library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Protecting Cells of Spreadsheet that Users Copied from Your Google Drive to User&#39;s Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/07/17/protecting-cells-of-spreadsheet-that-users-copied-from-your-google-drive-to-users-google-drive-using-google-apps-script/</link>
      <pubDate>Wed, 17 Jul 2019 08:20:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/17/protecting-cells-of-spreadsheet-that-users-copied-from-your-google-drive-to-users-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/847ea7e3e27a4a22004faa88d7b4dedb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the method for protecting cells of Spreadsheet that users copied from your Google Drive to user&amp;rsquo;s Google Drive using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;situation&#34;&gt;Situation:&lt;/h2&gt;&#xA;&lt;p&gt;This method supposes the following situation.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You want to make users copy a Spreadsheet on your Google Drive to user&amp;rsquo;s Google Drive. - Your Spreadsheet has several protected ranges. - Your Spreadsheet is shared with the user. - User doesn&amp;rsquo;t have own folder shared with you.&lt;/li&gt;&#xA;&lt;li&gt;You want to protect the ranges of Spreadsheet for the user. Namely, you want to remove the user from the editor of protected ranges.&lt;/li&gt;&#xA;&lt;li&gt;You want to achieve this using Google Apps Script.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;issue&#34;&gt;Issue:&lt;/h2&gt;&#xA;&lt;p&gt;In above situation, I think that the following points are the bottleneck.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linking Cloud Platform Project to Google Apps Script Project</title>
      <link>https://tanaikech.github.io/2019/07/05/linking-cloud-platform-project-to-google-apps-script-project/</link>
      <pubDate>Fri, 05 Jul 2019 09:17:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/07/05/linking-cloud-platform-project-to-google-apps-script-project/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e945c10917fac34a9d5d58cad768832c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At April 8, 2019, the specification of Google Apps Script Project was changed. You can see this at &lt;a href=&#34;https://developers.google.com/apps-script/guides/cloud-platform-projects&#34;&gt;Google Cloud Platform Projects&lt;/a&gt;. The official document says as follows.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Warning: Starting on or after April 8, 2019, the Google Cloud Platform Console won&amp;rsquo;t be able to access the default GCP projects created for new Apps Script projects. Older, existing scripts may have default GCP projects that are still accessible, however. If you have a new script and require access to its GCP project from the Google Cloud Platform Console, you must use a standard GCP project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamically Retrieving Keys and Values from Struct Property</title>
      <link>https://tanaikech.github.io/2019/06/25/dynamically-retrieving-keys-and-values-from-struct-property/</link>
      <pubDate>Tue, 25 Jun 2019 14:34:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/06/25/dynamically-retrieving-keys-and-values-from-struct-property/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9dc4718ac9fb2473ef029eb4dbda1b01&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for dynamically retrieving the keys and values from struct property using golang.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://play.golang.org/p/VBKfJg1ZBiB&#34;&gt;Go Playground&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xD;&#xA;&#xD;&#xA;import (&#xD;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xD;&#xA;&#x9;&amp;#34;reflect&amp;#34;&#xD;&#xA;)&#xD;&#xA;&#xD;&#xA;func main() {&#xD;&#xA;&#x9;s := struct {&#xD;&#xA;&#x9;&#x9;key1 string&#xD;&#xA;&#x9;&#x9;key2 string&#xD;&#xA;&#x9;&#x9;key3 string&#xD;&#xA;&#x9;}{&amp;#34;value1&amp;#34;, &amp;#34;value2&amp;#34;, &amp;#34;value3&amp;#34;}&#xD;&#xA;&#xD;&#xA;&#x9;r := reflect.ValueOf(&amp;amp;s).Elem()&#xD;&#xA;&#x9;rt := r.Type()&#xD;&#xA;&#x9;for i := 0; i &amp;lt; rt.NumField(); i++ {&#xD;&#xA;&#x9;&#x9;field := rt.Field(i)&#xD;&#xA;&#x9;&#x9;rv := reflect.ValueOf(&amp;amp;s)&#xD;&#xA;&#x9;&#x9;value := reflect.Indirect(rv).FieldByName(field.Name)&#xD;&#xA;&#x9;&#x9;fmt.Println(field.Name, value.String())&#xD;&#xA;&#x9;}&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Sorting for Slice using Golang</title>
      <link>https://tanaikech.github.io/2019/06/20/sorting-for-slice-using-golang/</link>
      <pubDate>Thu, 20 Jun 2019 12:19:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/06/20/sorting-for-slice-using-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4d0075dc21b643245be03d661e8d5f54&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for sorting a slice using Golang. Recently, I had a situation for sorting the coordinates of cells of Spreadsheet. As a test case, it thinks of the situation that the randomized cells are sorted. I think that this can be also used for a table except for Spreadsheet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-slice&#34;&gt;Sample slice:&lt;/h2&gt;&#xA;&lt;p&gt;The sample slice is as follows.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ar := []struct {&#xD;&#xA;    row   int&#xD;&#xA;    col   int&#xD;&#xA;    value string&#xD;&#xA;}{&#xD;&#xA;    {0, 0, &amp;#34;A1&amp;#34;},&#xD;&#xA;    {0, 1, &amp;#34;B1&amp;#34;},&#xD;&#xA;    {0, 2, &amp;#34;C1&amp;#34;},&#xD;&#xA;    {1, 0, &amp;#34;A2&amp;#34;},&#xD;&#xA;    {1, 1, &amp;#34;B2&amp;#34;},&#xD;&#xA;    {1, 3, &amp;#34;D2&amp;#34;},&#xD;&#xA;    {2, 0, &amp;#34;A3&amp;#34;},&#xD;&#xA;    {2, 2, &amp;#34;C3&amp;#34;},&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When each element of above slice is put to a Spreadsheet, it becomes as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - GetEditType</title>
      <link>https://tanaikech.github.io/2019/06/10/gas-library-getedittype/</link>
      <pubDate>Mon, 10 Jun 2019 16:19:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/06/10/gas-library-getedittype/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;GetEditType is a GAS library for retrieving the edit types of the OnEdit event trigger of Spreadsheet using Google Apps Script (GAS).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;In the case that the OnEdit event trigger (simple and installable triggers) is used at Spreadsheet, when users manually edited the cell of Spreadsheet, the trigger is fired. At this time, there is the case that I want to know the edit type. For example, I would like to know about the following edit types.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing Value Putting by Custom Function of Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/06/02/fixing-value-putting-by-custom-function-of-spreadsheet-using-google-apps-script/</link>
      <pubDate>Sun, 02 Jun 2019 17:41:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/06/02/fixing-value-putting-by-custom-function-of-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6ebf4bafbdc35116470bd197d00fe614&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for fixing a value putting by a custom function of Spreadsheet using Google Apps Script. When a custom function is used, the value retrieved by the custom function of Spreadsheet is automatically updated by recalculating. So in the case that the value retrieved by the custom function is changed by the time, the value is also changed by automatically updating. In this sample script, I would like to introduce a method for fixing such values.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Values with and without Duplicating from JSON Object using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/05/30/retrieving-values-with-and-without-duplicating-from-json-object-using-google-apps-script/</link>
      <pubDate>Thu, 30 May 2019 14:14:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/30/retrieving-values-with-and-without-duplicating-from-json-object-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/16ba2c77cdc8caa6a02958c9a4006e8a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the values with and without duplicating from JSON object using Google Apps Script. Also this can be used by Javascript.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1b&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2b&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value5a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value5b&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3b&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1b&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value4a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value4b&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value5a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value5b&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  { &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3b&amp;#34;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;withoutDuplicating&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;some&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;withDuplicating&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;withoutDuplicating&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  { &lt;span style=&#34;color:#a6e22e&#34;&gt;withoutDuplicating&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [], &lt;span style=&#34;color:#a6e22e&#34;&gt;withDuplicating&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [] }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;result&#34;&gt;Result&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;withoutDuplicating&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1a&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1b&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2a&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2b&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value5a&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value5b&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3a&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3b&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value4a&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value4b&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;withDuplicating&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1a&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1b&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value5a&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value5b&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3a&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3b&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As other situation, when &lt;code&gt;f.key1 === e.key1 &amp;amp;&amp;amp; f.key2 === e.key2&lt;/code&gt; is modified to &lt;code&gt;f.key1 === e.key1&lt;/code&gt;, the duplication of &lt;code&gt;key1&lt;/code&gt; can be retrieved.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/848aeafaac1ec676900bb78e3ce220b6&#34;&gt;Benchmark: Loop for Array Processing using Google Apps Script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Creating New Table and Putting Values to Cells using Google Docs API with Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/05/22/creating-new-table-and-putting-values-to-cells-using-google-docs-api-with-google-apps-script/</link>
      <pubDate>Wed, 22 May 2019 11:06:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/22/creating-new-table-and-putting-values-to-cells-using-google-docs-api-with-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3b5ac06747c8771f70afd3496278b04b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating new table and putting values to cells using Google Docs API with Google Apps Script. Unfortunately, in the current stage, although I had been looking for the method for creating a table and putting the values in each cell at the official document, I couldn&amp;rsquo;t find. Google Docs API is growing now. So such documents might be not prepared yet. By this situation, I investigated about the method for achieving this method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Possibility of Real Time Processes In a Cell on Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/05/22/possibility-of-real-time-processes-in-a-cell-on-spreadsheet-using-google-apps-script/</link>
      <pubDate>Wed, 22 May 2019 10:12:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/22/possibility-of-real-time-processes-in-a-cell-on-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/52e7bbdabf8bfc34ac16d5f27fd8cb80&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for investigating the possibility of the real time processes in a cell on Google Spreadsheet using Google Apps Script. As a sample situation, it tried the real time clock in a cell on Google Spreadsheet using Google Apps Script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20190522a_demo.gif&#34;&#xA;     alt=&#34;Possibility of Real Time Processes In a Cell on Spreadsheet using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage:&lt;/h2&gt;&#xA;&lt;p&gt;When you use this script, please do the following flow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deleting Pages of Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/05/17/deleting-pages-of-google-document-using-google-apps-script/</link>
      <pubDate>Fri, 17 May 2019 15:12:23 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/17/deleting-pages-of-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6d33c3ce00cd46e45d3551a587b2ae17&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for deleting pages of Google Document from the last page using Google Apps Script. There are no methods for directly deleting pages of Google Document. This is one of several workarounds. In this workaround, the following flow is used.&lt;/p&gt;&#xA;&lt;h2 id=&#34;flow&#34;&gt;Flow&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Retrieve paragraphs in the body of Document.&lt;/li&gt;&#xA;&lt;li&gt;Retrieve elements in each paragraph. The page break is included in the paragraph.&lt;/li&gt;&#xA;&lt;li&gt;Delete elements from last page in order.&lt;/li&gt;&#xA;&lt;li&gt;When the number of page breaks is the same with deletePages, the script is stopped.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;By this flow, several pages can be deleted from the last page in order.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Total Page of Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/05/17/retrieving-total-page-of-google-document-using-google-apps-script/</link>
      <pubDate>Fri, 17 May 2019 15:05:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/17/retrieving-total-page-of-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c78087c647dc9b5547b580ccd3629974&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving total page of Google Document using Google Apps Script. There are no methods for directly retrieving the total page of Google Document. This is one of several workarounds. In this workaround, the total page is retrieved by converting to PDF format.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;getDataAsString&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/Contents&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;totalPages: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;When you use this, please set the Google Document ID as &lt;code&gt;id&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Processing Duplicated Rows of 2 Dimensional Arrays using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/05/17/processing-duplicated-rows-of-2-dimensional-arrays-using-google-apps-script/</link>
      <pubDate>Fri, 17 May 2019 13:21:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/17/processing-duplicated-rows-of-2-dimensional-arrays-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5c2d6187c08b2d7b2f7a561de0c75c5e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;These are sample scripts for processing the duplicated rows of 2 dimensional arrays using Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When I use Google Spreadsheet and/or see Stackoverflow, I sometimes see the situation which is required to process the duplicated rows of 2 dimensional arrays. I thought that when the sample scripts for it have already prepared, they will be useful for other users including me. So I published this post. This sample scripts can be also used for Javascript. If this post is useful for you, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CLI Tool - gistwatcher</title>
      <link>https://tanaikech.github.io/2019/05/16/cli-tool-gistwatcher/</link>
      <pubDate>Thu, 16 May 2019 12:04:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/16/cli-tool-gistwatcher/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a CLI tool for retrieving the number of comments, stars and forks of Gists.&lt;/p&gt;&#xA;&lt;h1 id=&#34;demo&#34;&gt;Demo&lt;/h1&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/gistwatcher/raw/master/images/demo.gif&#34;&#xA;     alt=&#34;CLI Tool - gistwatcher&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this demonstration, a Gist is retrieved by an URL. You can see that the number of comments, stars and forks can be retrieved.&lt;/p&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/gistwatcher&#34;&gt;https://github.com/tanaikech/gistwatcher&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Specification of Google Apps Script Project was Changed at April 8, 2019</title>
      <link>https://tanaikech.github.io/2019/05/16/specification-of-google-apps-script-project-was-changed-at-april-8-2019/</link>
      <pubDate>Thu, 16 May 2019 08:50:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/16/specification-of-google-apps-script-project-was-changed-at-april-8-2019/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/558a5b6da0d9533017b1abe5815989c3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;At April 8, 2019, the specification of Google Apps Script Project was changed. Various specification was changed. Please see the detail at &lt;a href=&#34;https://developers.google.com/apps-script/guides/cloud-platform-projects&#34;&gt;Google Cloud Platform Projects&lt;/a&gt;. Here, I would like to introduce one change which might be useful for users. The official document says as follows.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When you enable an advanced service for your script project in the Apps Script editor, it is automatically enabled in the default GCP project when the script project is saved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Backup Project as zip File using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/05/06/backup-project-as-zip-file-using-google-apps-script/</link>
      <pubDate>Mon, 06 May 2019 13:23:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/06/backup-project-as-zip-file-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/035aa9f6603e7a8698c1cc67ab43e132&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for backing up a project as a zip file. When you use this script, please install &lt;a href=&#34;https://github.com/tanaikech/ProjectApp2&#34;&gt;a GAS library of ProjectApp2&lt;/a&gt;. You can back up both the standalone script type and the container-bound script type.&lt;/p&gt;&#xA;&lt;p&gt;In this script, the blob of zip file can be retrieved from ProjectApp2. So you can also send it as email without creating a file.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;projectId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### fileId of project ###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ProjectApp2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getProjectBlob&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;projectId&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;backupProject.zip&amp;#34;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;testing&#34;&gt;Testing:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;July 2, 2020: I could confirm that the script worked. So in the current stage, it seems that the specification is not changed.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Go Library - go-fetchall</title>
      <link>https://tanaikech.github.io/2019/05/01/go-library-go-fetchall/</link>
      <pubDate>Wed, 01 May 2019 21:14:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/05/01/go-library-go-fetchall/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a Golang library for running HTTP requests with the asynchronous process. The progress of requests can be also shown.&lt;/p&gt;&#xA;&lt;h1 id=&#34;demo&#34;&gt;Demo&lt;/h1&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/go-fetchall/raw/master/images/demo.gif&#34;&#xA;     alt=&#34;Go Library - go-fetchall&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In this demonstration, 5 requests are run by 2 workers. And before each request, the waiting time for 2 seconds is added as a sample. By this, you can easily see the work with 2 workers. Also you can see this script at &lt;a href=&#34;#samplescript&#34;&gt;the following sample script&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Split Array by n Elements using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/04/30/split-array-by-n-elements-using-google-apps-script/</link>
      <pubDate>Tue, 30 Apr 2019 13:54:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/30/split-array-by-n-elements-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c1fd2b4bce19597abc609b72818c1d8e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for splitting an array by n elements using Google Apps Script.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sample-script-1&#34;&gt;Sample script 1:&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;limit&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;splice&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;limit&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0], [10.0]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Above sample script is a simple. But at Google Apps Script, the process cost of &amp;ldquo;while&amp;rdquo; is higher than the for loop as shown in &lt;a href=&#34;https://gist.github.com/tanaikech/848aeafaac1ec676900bb78e3ce220b6&#34;&gt;this report&lt;/a&gt;. So I recommend the following sample script for Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Overwriting Several Google Documents by 2 Text Files using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/04/20/overwriting-several-google-documents-by-2-text-files-using-google-apps-script/</link>
      <pubDate>Sat, 20 Apr 2019 11:11:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/20/overwriting-several-google-documents-by-2-text-files-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/55f0a57ed98ff11e7d8780cc773b6dce&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for overwriting several Google Documents by 2 text files using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Before you run this sample script, please install a GAS library of &lt;a href=&#34;https://github.com/tanaikech/FetchApp&#34;&gt;FetchApp&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;As a sample situation, it supposes to overwrite 2 existing Google Documents by 2 text files using the method of &lt;a href=&#34;https://developers.google.com/drive/api/v3/reference/files/update&#34;&gt;files.update&lt;/a&gt; Drive API v3. In the current stage, &lt;a href=&#34;https://developers.google.com/drive/api/v3/batch&#34;&gt;the batch request of Drive API cannot use the file media.&lt;/a&gt; This sample script might become a workaround for updating files by quasi batching request with the asynchronous process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Google Document by Converting PDF and Image Files with OCR using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/04/20/creating-google-document-by-converting-pdf-and-image-files-with-ocr-using-google-apps-script/</link>
      <pubDate>Sat, 20 Apr 2019 11:10:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/20/creating-google-document-by-converting-pdf-and-image-files-with-ocr-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b73396314254f7a5bf571af6b65eac07&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating Google Document by converting PDF and image files with OCR using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Before you run this sample script, please install a GAS library of &lt;a href=&#34;https://github.com/tanaikech/FetchApp&#34;&gt;FetchApp&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sample&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### fileId of PDF file and image files ###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;metadata&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sampleDocument&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// Filename of created Google Document&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GOOGLE_DOCS&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// MimeType of Google Document&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileBlob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFormData&lt;/span&gt;(); &lt;span style=&#34;color:#75715e&#34;&gt;// Create form data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;metadata&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;metadata&lt;/span&gt;), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fileBlob&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;Authorization&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bearer &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ScriptApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getOAuthToken&lt;/span&gt;() },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// DriveApp.createFile(blob) // This comment line is used for automatically detecting scope for running this sample script.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>GAS Library - FetchApp</title>
      <link>https://tanaikech.github.io/2019/04/20/gas-library-fetchapp/</link>
      <pubDate>Sat, 20 Apr 2019 11:07:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/20/gas-library-fetchapp/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a GAS library for creating and requesting the type of multipart/form-data using Google Apps Script. This library enhances Class UelFetchApp of Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;In order to fetch data from URL, there is &lt;a href=&#34;https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app&#34;&gt;Class UrlFetchApp&lt;/a&gt; in Google Apps Script. As the method for fetching, there is the method of &lt;a href=&#34;https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)&#34;&gt;&lt;code&gt;fetch(url, params)&lt;/code&gt;&lt;/a&gt;. In the current stage which was released this library, when user want to request with &lt;a href=&#34;https://www.w3.org/TR/html5/sec-forms.html#multipart-form-data&#34;&gt;the type of multipart/form-data&lt;/a&gt;, the request body is required to be created by the user. But it is &lt;a href=&#34;https://gist.github.com/tanaikech/d595d30a592979bbf0c692d1193d260c&#34;&gt;a bit difficult to create the request body&lt;/a&gt;. I thought that if the request body for the type of multipart/form-data can be easily created, it might be also useful for other users. So I created this as a GAS library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Many Files to Google Docs using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/04/11/converting-many-files-to-google-docs-using-google-apps-script/</link>
      <pubDate>Thu, 11 Apr 2019 11:14:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/11/converting-many-files-to-google-docs-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d60700b523af7aaf89b9e7c92e35c3c2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for converting a lot of files to Google Docs (Spreadsheet, Document and Slides).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/drive/api/v3/batch&#34;&gt;Batch request&lt;/a&gt; can be used for converting files. In this sample script, the files are converted using the batch request.&lt;/li&gt;&#xA;&lt;li&gt;Batch request can request 100 API by one API call.&lt;/li&gt;&#xA;&lt;li&gt;This sample script uses &lt;a href=&#34;https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchallrequests&#34;&gt;the fetchAll method&lt;/a&gt;. So even if there are over 100 files, this script can process them.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Before you run the script, please set the variables at &lt;code&gt;main()&lt;/code&gt;.&lt;/strong&gt; And, please enable Drive API at Advanced Google services.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ImgApp</title>
      <link>https://tanaikech.github.io/2019/04/06/updated-gas-library-imgapp/</link>
      <pubDate>Sat, 06 Apr 2019 10:46:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/06/updated-gas-library-imgapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;ImgApp&lt;/a&gt; was updated to v1.2.2.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.2 (April 6, 2019)&lt;/p&gt;&#xA;&lt;p&gt;By Google&amp;rsquo;s update, the error of &amp;ldquo;Malformed multipart body.&amp;rdquo; occurs. This error was resolved.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;https://github.com/tanaikech/ImgApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Limitations for Inserting Images to Google Docs</title>
      <link>https://tanaikech.github.io/2019/04/05/limitations-for-inserting-images-to-google-docs/</link>
      <pubDate>Fri, 05 Apr 2019 11:49:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/05/limitations-for-inserting-images-to-google-docs/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9414d22de2ff30216269ca7be4bce462&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When an image is inserted to Google Docs (Spreadsheet, Document and Slides) using the method of insertImage using Google Apps Script, there is the case that the error occurs. The error messages are &amp;ldquo;server error&amp;rdquo; and &amp;ldquo;invalid image data&amp;rdquo;. Here, I would like to introduce the limitations for inserting images to Google Docs. As the result, it was found that the limitation is due to both the mimeTypes and the area of image rather than the file size.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Access Token using Service Account for Node.js without using googleapis</title>
      <link>https://tanaikech.github.io/2019/04/02/retrieving-access-token-using-service-account-for-node.js-without-using-googleapis/</link>
      <pubDate>Tue, 02 Apr 2019 16:42:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/02/retrieving-access-token-using-service-account-for-node.js-without-using-googleapis/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7aaf2276e4e6104b89802e85957e75ae&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample Node.js script to retrieve access token from Service Account of Google without using googleapis.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cryptor&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;crypto&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;request&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;privateKey&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// private_key of JSON file retrieved by creating Service Account&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clientEmail&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// client_email of JSON file retrieved by creating Service Account&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scopes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/auth/drive.readonly&amp;#34;&lt;/span&gt;]; &lt;span style=&#34;color:#75715e&#34;&gt;// Sample scope&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/oauth2/v4/token&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;alg&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RS256&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;typ&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JWT&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt;(Date.&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;claim&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;iss&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clientEmail&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;scope&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scopes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;aud&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;exp&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3600&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;iat&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Buffer&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;)).&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;base64&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Buffer&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;claim&lt;/span&gt;)).&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;base64&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cryptor&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createSign&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;RSA-SHA256&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;privateKey&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;base64&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;assertion&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;grant_type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;urn:ietf:params:oauth:grant-type:jwt-bearer&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}, (&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Creating New Google Docs and Overwriting Existing Google Docs by Text with Node.js without using googleapis</title>
      <link>https://tanaikech.github.io/2019/04/02/creating-new-google-docs-and-overwriting-existing-google-docs-by-text-with-node.js-without-using-googleapis/</link>
      <pubDate>Tue, 02 Apr 2019 16:33:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/02/creating-new-google-docs-and-overwriting-existing-google-docs-by-text-with-node.js-without-using-googleapis/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/915f1034749b8b2f451556167663ea19&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are 2 sample scripts.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create new Spreadsheet using a text value as CSV data.&lt;/li&gt;&#xA;&lt;li&gt;Overwrite the existing Google Document using a text value.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;When you use these script, please enable Drive API and retrieve your access token.&lt;/p&gt;&#xA;&lt;h2 id=&#34;create-new-spreadsheet-using-text-value&#34;&gt;Create New Spreadsheet using Text Value&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;request&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;textData&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a1, b1, c1, d1, e1&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// This is used as CSV data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;orgMimeType&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text/csv&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;orgFileName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample.csv&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Access token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;metadata&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;convertedSampleCSV&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.spreadsheet&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xxxxxxxxxxx&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;--&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Disposition: form-data; name=\&amp;#34;metadata\&amp;#34;\r\n&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type: application/json; charset=UTF-8\r\n\r\n&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;metadata&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;--&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Disposition: form-data; name=\&amp;#34;file\&amp;#34;; filename=\&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;orgFileName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\&amp;#34;\r\n&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type: &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;orgMimeType&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n\r\n&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;payload&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Buffer&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;concat&lt;/span&gt;([&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Buffer&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;utf8&amp;#34;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Buffer&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;textData&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;binary&amp;#39;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Buffer&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n--&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;--&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;utf8&amp;#34;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;post&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;multipart/related; boundary=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;boundary&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Authorization&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Bearer &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;payload&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;, (&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;overwrite-existing-google-document-using-text-value&#34;&gt;Overwrite Existing Google Document using Text Value&lt;/h2&gt;&#xA;&lt;p&gt;This can be used when you don&amp;rsquo;t want to update the existing Google Docs without changing the file ID.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deleting Positioned Images on Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/04/01/deleting-positioned-images-on-google-document-using-google-apps-script/</link>
      <pubDate>Mon, 01 Apr 2019 10:49:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/01/deleting-positioned-images-on-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/02c4c4ec7cb0ac83771e4306afcd422c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for deleting the positioned images on Google Document using Google Apps Script. In the current stage, unfortunately, there are no methods for deleting the positioned images in Class PositionedImage, yet. But when Google Docs API is used, the positioned images can be deleted.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;When you use this script, please enable Google Docs API at Advanced Google Services and API console. You can see how to enable them at &lt;a href=&#34;https://stackoverflow.com/a/55438282&#34;&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modify Searched Text to Small Capital Letters using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/04/01/modify-searched-text-to-small-capital-letters-using-google-apps-script/</link>
      <pubDate>Mon, 01 Apr 2019 10:43:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/01/modify-searched-text-to-small-capital-letters-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/30e8c778eb1102f651550b2345b6f3c0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for modifying the searched text to the small capital letters using Google Apps Script. Unfortunately, in the current stage, there are no methods for modifying the part of texts to the small capital letters in Document Service, yet. But when Google Docs API is used, this can be achieved.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;When you use this script, please enable Google Docs API at Advanced Google Services and API console. You can see how to enable them at &lt;a href=&#34;https://stackoverflow.com/a/55438282&#34;&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - GistChecker</title>
      <link>https://tanaikech.github.io/2019/04/01/gas-library-gistchecker/</link>
      <pubDate>Mon, 01 Apr 2019 10:27:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/04/01/gas-library-gistchecker/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a GAS library for notifying the change of number of comments, stars and forks of own Gists as an email using Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Recently, I noticed that when a comment was posted to own Gists, and the numbers of stars and forks of own Gists were changed, the notification mail is not sent. Also I knew that in the current stage, there are no official methods for notifying them, yet. For this situation, I thought an application for notifying them as an email can be created using Google Apps Script, and when such application can be easily to be used, it may be useful for other users. So I created this as a GAS library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading File to Shared Folder using ggsrun</title>
      <link>https://tanaikech.github.io/2019/03/30/uploading-file-to-shared-folder-using-ggsrun/</link>
      <pubDate>Sat, 30 Mar 2019 16:42:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/03/30/uploading-file-to-shared-folder-using-ggsrun/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/608f71fb1fccd19d30d597d0f2c345f8&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;ggsrun&lt;/a&gt; is also a CLI application for using Google Drive.&lt;/p&gt;&#xA;&lt;p&gt;Here, I would like to introduce a sample command. This is a sample command for uploading a file to a shared folder using ggsrun.&lt;/p&gt;&#xA;&lt;p&gt;This situation supposes that the shared folder is &lt;code&gt;https://drive.google.com/drive/folders/abcdefg?usp=sharing&lt;/code&gt; and the folder has the edit permission.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sample-command&#34;&gt;Sample command:&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ggsrun u -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample.txt&amp;#34;&lt;/span&gt; -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;abcdefg&amp;#34;&lt;/span&gt; --serviceaccount &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###JSON file of Service Account###&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;If you have already used OAuth2, you can upload the file by &lt;code&gt;ggsrun u -f &amp;quot;sample.txt&amp;quot; -p &amp;quot;###folderId###&amp;quot;&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Communities for Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/03/28/communities-for-google-apps-script/</link>
      <pubDate>Thu, 28 Mar 2019 09:33:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/03/28/communities-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6b42d86414c5529fee56367d6bf67516&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Consumer (personal) version of Google+ is closed on April 2, 2019. By this, &lt;a href=&#34;https://plus.google.com/communities/102471985047225101769/&#34;&gt;Apps Script community of Google+&lt;/a&gt; is also closed. This is one of important communities for discussing. So in this post, I would like to introduce the other communities related to Google Apps Script.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;As the next community of &lt;a href=&#34;https://plus.google.com/communities/102471985047225101769/&#34;&gt;Apps Script community of Google+&lt;/a&gt;, &lt;a href=&#34;https://groups.google.com/forum/#!forum/google-apps-script-community&#34;&gt;Google Apps Script Community&lt;/a&gt; was launched.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is also introduced at &lt;a href=&#34;https://developers.google.com/apps-script/support#discussions&#34;&gt;How to get help of official site&lt;/a&gt; like &lt;a href=&#34;https://developers.google.com/apps-script/community&#34;&gt;this&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Stackoverflow: &lt;a href=&#34;https://stackoverflow.com/questions/tagged/google-apps-script&#34;&gt;https://stackoverflow.com/questions/tagged/google-apps-script&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parsing Query Parameters from URL using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/03/26/gastips/</link>
      <pubDate>Tue, 26 Mar 2019 14:58:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/03/26/gastips/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/34437522f3ce777bd060458b9cc02bdf&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for parsing query parameters from an URL using Google Apps Script. Also this can be used at Javascript. The process cost becomes a bit lower than that of the script using the regular expression.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;parseQuery&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;?&amp;#34;&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;amp;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;trim&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;trim&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; isNaN(&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }, {});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this function when you test this script.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://sampleUrl.com/sample?key1=value1&amp;amp;key2=value2&amp;amp;key1=value3&amp;amp;key3=value4&amp;amp;key2=value5&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;parseQuery&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;result&#34;&gt;Result&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{&#xD;&#xA;  &amp;#34;key1&amp;#34;: [&#xD;&#xA;    &amp;#34;value1&amp;#34;,&#xD;&#xA;    &amp;#34;value3&amp;#34;&#xD;&#xA;  ],&#xD;&#xA;  &amp;#34;key2&amp;#34;: [&#xD;&#xA;    &amp;#34;value2&amp;#34;,&#xD;&#xA;    &amp;#34;value5&amp;#34;&#xD;&#xA;  ],&#xD;&#xA;  &amp;#34;key3&amp;#34;: [&#xD;&#xA;    &amp;#34;value4&amp;#34;&#xD;&#xA;  ]&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Trend of google-apps-script Tag on Stackoverflow 2019</title>
      <link>https://tanaikech.github.io/2019/03/25/trend-of-google-apps-script-tag-on-stackoverflow-2019/</link>
      <pubDate>Mon, 25 Mar 2019 16:29:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/03/25/trend-of-google-apps-script-tag-on-stackoverflow-2019/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4e4f1ca20b8dbce08f87289db415df7d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;center&gt;&#xD;&#xA;March 25, 2019&#xD;&#xA;    Published.&#xD;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At Stackoverflow, a lot of people post the questions and answers to the questions every day. There are various tags in Stackoverflow. A lot of discussions are performed at each tag. Their discussions bring the important information and are much useful for a lot of people. As one of tags, there is &amp;ldquo;google-apps-script&amp;rdquo;. I sometimes discuss at the questions with that tag. When we see the discussions, we can notice that the discussions are changed and progressed by the time, because &amp;ldquo;Google Apps Script&amp;rdquo; which is the origin of the tag is updated. This report thinks this change as the trend of tag of &amp;ldquo;google-apps-script&amp;rdquo;. This trend includes the number of questions, questioners, answerers and tags adding to the tag of &amp;ldquo;google-apps-script&amp;rdquo;. The trend of tag of &amp;ldquo;google-apps-script&amp;rdquo; is deeply related to the progression of Google Apps Script and the various applications for Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modify Shading Color of Paragraph on Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/03/16/modify-shading-color-of-paragraph-on-google-document-using-google-apps-script/</link>
      <pubDate>Sat, 16 Mar 2019 16:25:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/03/16/modify-shading-color-of-paragraph-on-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/aadeca550943d07ee25d90d3bda3c9b9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a script for modifying the shading color of paragraph on Google Document using Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Recently, by releasing Google Docs API, the shading color got to be able to be modified using the script. Here, I would like to introduce a sample script for modifying the shading color of the paragraph on Google Document. At the current Document Service, the shading color cannot be modified yet. I think that this will be achieved in the future update. At that time, I think that a new property might be added to &lt;a href=&#34;https://developers.google.com/apps-script/reference/document/attribute&#34;&gt;Enum Attribute&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding Title of vAxis to Embedded Chart on Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/03/04/adding-title-of-vaxis-to-embedded-chart-on-spreadsheet-using-google-apps-script/</link>
      <pubDate>Mon, 04 Mar 2019 13:48:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/03/04/adding-title-of-vaxis-to-embedded-chart-on-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4125cc280e15c0fc726cb2fe4f35a3f7&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When a chart is created by using EmbeddedChartBuilder of Spreadsheet service, the title of vAxis which is put by &lt;code&gt;setOption(&amp;quot;vAxis&amp;quot;, {title: &amp;quot;y axis&amp;quot;})&lt;/code&gt; doesn&amp;rsquo;t work. It is considered that this is a bug. Because I have confirmed that this had worked fine. &lt;a href=&#34;https://tanaikech.github.io/2017/02/13/making-charts-at-spreadsheet/&#34;&gt;Ref&lt;/a&gt; But this specification had been changed. So I would like to introduce the method for adding the title of vAxis when a chart is created using Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>tarUnarchiver for Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/02/27/tarunarchiver-for-google-apps-script/</link>
      <pubDate>Wed, 27 Feb 2019 13:45:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/02/27/tarunarchiver-for-google-apps-script/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a script for extracting files from a tar file using Google Apps Script.&lt;/strong&gt; This script was created by native Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The following 3 situations gave me the motivarion for creating this script.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Although I had been looking for the script for extracting files from a tar file from before, I have still not been able to find it.&lt;/li&gt;&#xA;&lt;li&gt;Unfortunately, there are no methods for extracting the files from the tar file in Google Apps Script. But fortunately, from &lt;a href=&#34;https://en.wikipedia.org/wiki/Tar_(computing)&#34;&gt;wiki of tar&lt;/a&gt;, I could retrieve the structure information of the tar data. And I can also study by creating this script.&lt;/li&gt;&#xA;&lt;li&gt;I found &lt;a href=&#34;https://stackoverflow.com/questions/54850028/how-to-extract-files-from-tar-archive-with-google-apps-script&#34;&gt;this thread&lt;/a&gt; at Stackoverflow. By this, I could understand that other users also want the script for extracting files from the tar file.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So I created this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sample Script for Executing with Synchronous Process using Node.js</title>
      <link>https://tanaikech.github.io/2019/02/12/sample-script-for-executing-with-synchronous-process-using-node.js/</link>
      <pubDate>Tue, 12 Feb 2019 09:02:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/02/12/sample-script-for-executing-with-synchronous-process-using-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b4367045f5acd831a25db8865040993a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for executing with the synchronous process using Node.js.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;work&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Promise((&lt;span style=&#34;color:#a6e22e&#34;&gt;resolve&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;reject&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;resolve&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ok&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }, &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;start&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;work&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]).&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;end&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;(); &lt;span style=&#34;color:#75715e&#34;&gt;// Run main().&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;result&#34;&gt;Result&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;start1&#xD;&#xA;1&#xD;&#xA;ok1&#xD;&#xA;end1&#xD;&#xA;start2&#xD;&#xA;2&#xD;&#xA;ok2&#xD;&#xA;end2&#xD;&#xA;start3&#xD;&#xA;3&#xD;&#xA;ok3&#xD;&#xA;end3&#xD;&#xA;start4&#xD;&#xA;4&#xD;&#xA;ok4&#xD;&#xA;end4&#xD;&#xA;start5&#xD;&#xA;5&#xD;&#xA;ok5&#xD;&#xA;end5&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ProcessApp</title>
      <link>https://tanaikech.github.io/2019/02/10/updated-gas-library-processapp/</link>
      <pubDate>Sun, 10 Feb 2019 11:04:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/02/10/updated-gas-library-processapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ProcessApp&#34;&gt;ProcessApp&lt;/a&gt; was updated to v1.0.1.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (February 10, 2019)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;New method of &lt;a href=&#34;https://github.com/tanaikech/ProcessApp#getexecutiontimeofprocesstype&#34;&gt;getExecutionTimeOfProcessType()&lt;/a&gt; was added.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This method retrieves the total execution time of all functions by filtering the process type. For example, the total execution time of Web Apps can be retrieved.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/ProcessApp&#34;&gt;https://github.com/tanaikech/ProcessApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - ProcessApp</title>
      <link>https://tanaikech.github.io/2019/02/09/gas-library-processapp/</link>
      <pubDate>Sat, 09 Feb 2019 16:11:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/02/09/gas-library-processapp/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a library for retrieving the process and information of Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;methods&#34;&gt;Methods&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;getExecutionTimeOfTrigger() : This method retrieves the total execution time of all functions executed by the time-driven trigger at owner&amp;rsquo;s account. For example, you can know the total execution time of all functions executed by the time-driven trigger in 24 h.&lt;/li&gt;&#xA;&lt;li&gt;getDevUrl() : This method retrieves the endpoint of developer mode for Web Apps like &lt;code&gt;https://script.google.com/macros/s/#####/dev&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;getRunningFunctions() : This method retrieves the functions which are running now.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/ProcessApp&#34;&gt;https://github.com/tanaikech/ProcessApp&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating One-time Writing Cells using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/01/24/creating-one-time-writing-cells-using-google-apps-script/</link>
      <pubDate>Thu, 24 Jan 2019 11:37:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/01/24/creating-one-time-writing-cells-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4ba859167a84ed625fcbab392c8d34cd&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for creating one-time writing cells using Google Apps Script. At first, it supposes the following situation.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A Spreadsheet is shared with users. The owner of Spreadsheet is you.&lt;/li&gt;&#xA;&lt;li&gt;After users put a value to a cell, you don&amp;rsquo;t want to make users edit the cell again.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Namely, you want to protect the cell.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This sample script achieves above situation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;preparation&#34;&gt;Preparation&lt;/h2&gt;&#xA;&lt;p&gt;Before you use this script, please do the following flow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Update: Taking advantage of Web Apps with Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/01/16/update-taking-advantage-of-web-apps-with-google-apps-script/</link>
      <pubDate>Wed, 16 Jan 2019 10:42:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/01/16/update-taking-advantage-of-web-apps-with-google-apps-script/</guid>
      <description>&lt;p&gt;&amp;ldquo;Taking advantage of Web Apps with Google Apps Script&amp;rdquo; was updated. A section of &lt;a href=&#34;https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script#howtousedevmode&#34;&gt;&amp;ldquo;How to use dev mode from outside&amp;rdquo;&lt;/a&gt; was added.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When you deploy Web Apps, you can see the link labeled latest code. The link is like &lt;code&gt;https://script.google.com/macros/s/###/dev&lt;/code&gt;. When you access to the link of latest code using your browser under you login to Google, you can access to Web Apps with the dev mode. But if you want to access to Web Apps with the dev mode from outside, there are no documents for the method. Here, it introduces such method.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script&#34;&gt;https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Opening Dialog Box during Calculation and Retrieving Calculated Result using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/01/13/opening-dialog-box-during-calculation-and-retrieving-calculated-result-using-google-apps-script/</link>
      <pubDate>Sun, 13 Jan 2019 15:35:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/01/13/opening-dialog-box-during-calculation-and-retrieving-calculated-result-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3a4837d4ef0d31522cd9ff29c085c786&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When it starts a calculation, open a dialog box.&lt;/li&gt;&#xA;&lt;li&gt;When the calculation is finished, close the dialog and retrieve the calculated result.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This is a sample script for achieving above flow. This sample script supposes to use the container-bound script of Spreadsheet. When you use this, please run the function of &lt;code&gt;run()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script:&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doSomething&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Scripts for calculating.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3000&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// This is a sample wait time.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;({&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;openDialogue&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;script&amp;gt;google.script.run.withSuccessHandler(function() {google.script.host.close()}).doSomething();&amp;lt;/script&amp;gt;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;HtmlService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createHtmlOutput&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getUi&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;showModalDialog&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sample&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;result&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;openDialogue&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;({});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;note&#34;&gt;Note:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This can be also used for the sidebar and other Google Docs.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Closing Existing Sidebar using Google Apps Script</title>
      <link>https://tanaikech.github.io/2019/01/09/closing-existing-sidebar-using-google-apps-script/</link>
      <pubDate>Wed, 09 Jan 2019 11:58:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2019/01/09/closing-existing-sidebar-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c1b5fb20342dae623139ca0f48c8c12c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for closing the existing sidebar using Google Apps Script. When the sidebar is opened, in order to close the sidebar, the sidebar can be closed by running &lt;code&gt;google.script.host.close()&lt;/code&gt; with the script of sidebar. This is the general case.&lt;/p&gt;&#xA;&lt;p&gt;If you want to close the opened sidebar, such functions are not prepared. So I thought this workaround. The flow of this workaround is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://tanaikech.github.io/contact/</link>
      <pubDate>Sun, 06 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://tanaikech.github.io/contact/</guid>
      <description>&lt;p&gt;email: &lt;a href=&#34;mailto:tanaike@hotmail.com&#34;&gt;tanaike@hotmail.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sites.google.com/view/tanaikecontactform&#34;&gt;Contact form&lt;/a&gt;&lt;/p&gt;&#xA;&lt;br&gt;&#xA;&lt;h3 id=&#34;important&#34;&gt;IMPORTANT&lt;/h3&gt;&#xA;&lt;p&gt;Please confirm the following points before contacting me:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;If you encounter bugs or have suggestions for future improvements in my published applications and scripts, please let me know! I&amp;rsquo;m always happy to consider modifications and updates. However, when reporting bugs, please refrain from including any modifications you&amp;rsquo;ve made to the script beyond variable changes like file ID or filename. This is because I&amp;rsquo;ve only tested the published versions. For bug reports, detailed information for reproducing the issue is incredibly helpful. The more I understand how to replicate the bug, the easier it is for me to pinpoint the problem and develop a solution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v171</title>
      <link>https://tanaikech.github.io/2018/12/30/updated-ggsrun-to-v171/</link>
      <pubDate>Sun, 30 Dec 2018 12:16:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/30/updated-ggsrun-to-v171/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v171&#34;&gt;ggsrun was updated to v.1.7.1&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.7.1 (December 30, 2018)&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A bug was removed.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When a project is downloaded and zipped, there was a case that &amp;ldquo;createdTime&amp;rdquo; and &amp;ldquo;modifiedTime&amp;rdquo; of the project cannot be retrieved by Apps Script API. This was modified.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v170</title>
      <link>https://tanaikech.github.io/2018/12/27/updated-ggsrun-to-v170/</link>
      <pubDate>Thu, 27 Dec 2018 11:51:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/27/updated-ggsrun-to-v170/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v170&#34;&gt;ggsrun was updated to v.1.7.0&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.7.0 (December 27, 2018)&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#managepermissions&#34;&gt;Manage permissions of files.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#getdriveinformation&#34;&gt;Get Drive Information.&lt;/a&gt; By this, you can know the storage quotas.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#useserviceaccount&#34;&gt;&lt;strong&gt;ggsrun got to be able to be used by not only OAuth2, but also Service Account. By this, using ggsrun, Google Drive for Service Account got to be able to be managed.&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Some modifications.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Multiple Files From Local To Google Drive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/12/22/uploading-multiple-files-from-local-to-google-drive-using-google-apps-script/</link>
      <pubDate>Sat, 22 Dec 2018 16:44:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/22/uploading-multiple-files-from-local-to-google-drive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/88fcae255abb4aac5bec81ad5ca213ef&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for uploading multiple files from local PC to Google Drive using Google Apps Script. The dialog, sidebar and Web Apps can be used as the GUI interface.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-1&#34;&gt;Sample 1&lt;/h2&gt;&#xA;&lt;p&gt;In this sample, the following flow is run.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Select files at browser.&lt;/li&gt;&#xA;&lt;li&gt;Upload the files every file.&lt;/li&gt;&#xA;&lt;li&gt;Save each file in Google Drive.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;When you use this, please copy and paste the Google Apps Script and HTML to the script editor, and run the HTML using the dialog, sidebar and Web Apps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Summarizing Slides as Thumbnails</title>
      <link>https://tanaikech.github.io/2018/12/14/summarizing-slides-as-thumbnails/</link>
      <pubDate>Fri, 14 Dec 2018 16:26:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/14/summarizing-slides-as-thumbnails/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/79749b9fc411da91f932608b5c01ea5b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for summarizing Slides as thumbnails. For example, it supposes a Slides including 15 pages. When this script is run, it summarizes 6 pages to one page as images. I created this because there are no methods for directly achieving this. This is useful for myself. If this is also useful for you, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;p&gt;The flow of this workaround is as follows.&lt;/p&gt;&#xA;&lt;h3 id=&#34;flow&#34;&gt;Flow:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Copy the original Slides file as a temporary file.&lt;/li&gt;&#xA;&lt;li&gt;Retrieve images of all slides.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the Slides file is exported to PNG file, the top page is exported as PNG file. I used this.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Put and arrange the retrieved images to the temporary file.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the image is inserted to a slide, retrieve the size and change the size, then put the image to the calculated position.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;sample-script-1&#34;&gt;Sample script 1:&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Please set these parameters&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### file ID ###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// file ID of original Slides&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;col&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Number of columns&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Number of rows&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;wsize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Size of width of each image (pixels)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Space of each image (pexels)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Create temporary file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;originalFile&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempFile&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;originalFile&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;makeCopy&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempFile&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Retrieve slides as images&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SlidesApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;openById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;idt&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;slides&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSlides&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ScriptApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getOAuthToken&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;baseUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://docs.google.com/presentation/d/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/export/&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;baseUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;png?access_token=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blobs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;slides&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;slides&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;saveAndClose&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SlidesApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;openById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;idt&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;slides&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSlides&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Put images &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ph&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getPageHeight&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pw&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getPageWidth&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;leftOffset&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;pw&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; ((&lt;span style=&#34;color:#a6e22e&#34;&gt;wsize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;col&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;col&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)))) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;leftOffset&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Images are sticking out from a slide.&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;col&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;row&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;loops&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;ceil&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blobs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;col&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;row&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;loop&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;loop&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;loops&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;loop&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ns&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;insertSlide&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;loop&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;topOffset&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;top&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;leftOffset&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;loop&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;loop&lt;/span&gt;); &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blobs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ns&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;insertImage&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blobs&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;w&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getWidth&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getHeight&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hsize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;wsize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;w&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;topOffset&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ph&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; ((&lt;span style=&#34;color:#a6e22e&#34;&gt;hsize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;row&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt;)) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;topOffset&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Images are sticking out from a slide.&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;top&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;topOffset&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setWidth&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;wsize&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setHeight&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;hsize&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setTop&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;top&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setLeft&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;left&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getObjectId&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;col&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;loop&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;top&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;topOffset&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hsize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;leftOffset&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;wsize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;saveAndClose&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;sample-script-2&#34;&gt;Sample script 2:&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;When you use this script, please enable Slides API at API console.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v122</title>
      <link>https://tanaikech.github.io/2018/12/12/updated-goodls-to-v122/</link>
      <pubDate>Wed, 12 Dec 2018 14:56:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/12/updated-goodls-to-v122/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.2 (December 12, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When files are downloaded from a specific folder, it got to be able to select mimeType. By this, files with the specific mimeType in the specific folder can be retrieved. For this, I updated the go library &lt;a href=&#34;https://github.com/tanaikech/go-getfilelist&#34;&gt;go-getfilelist&lt;/a&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$ goodls -u [URL] -key [APIkey] -m &amp;quot;application/pdf,image/png&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Go Library - go-getfilelist to v102</title>
      <link>https://tanaikech.github.io/2018/12/12/updated-go-library-go-getfilelist-to-v102/</link>
      <pubDate>Wed, 12 Dec 2018 10:02:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/12/updated-go-library-go-getfilelist-to-v102/</guid>
      <description>&lt;h2 id=&#34;go-getfilelist-was-updated-to-v102&#34;&gt;go-getfilelist was updated to v1.0.2&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (December 12, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;New method for selecting mimeType was added. When this method is used, files with the specific mimeType in the specific folder can be retrieved.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can get this from &lt;a href=&#34;https://github.com/tanaikech/go-getfilelist&#34;&gt;https://github.com/tanaikech/go-getfilelist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Access Token using Service Account by Google&#39;s OAuth2 package for Golang</title>
      <link>https://tanaikech.github.io/2018/12/11/retrieving-access-token-using-service-account-by-googles-oauth2-package-for-golang/</link>
      <pubDate>Tue, 11 Dec 2018 14:47:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/11/retrieving-access-token-using-service-account-by-googles-oauth2-package-for-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4b4cb27ece27573b3f4df0e050b52330&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample golang script for retrieving access token using &lt;a href=&#34;https://developers.google.com/identity/protocols/OAuth2ServiceAccount&#34;&gt;Service Account of Google&lt;/a&gt; by &lt;a href=&#34;https://github.com/golang/oauth2&#34;&gt;Google&amp;rsquo;s OAuth2 package&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The script without using Google&amp;rsquo;s OAuth2 package is &lt;a href=&#34;https://github.com/tanaikech/go-gettokenbyserviceaccount&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xD;&#xA;&#xD;&#xA;import (&#xD;&#xA;    &amp;#34;encoding/json&amp;#34;&#xD;&#xA;    &amp;#34;fmt&amp;#34;&#xD;&#xA;    &amp;#34;io/ioutil&amp;#34;&#xD;&#xA;    &amp;#34;os&amp;#34;&#xD;&#xA;&#xD;&#xA;    &amp;#34;golang.org/x/oauth2&amp;#34;&#xD;&#xA;    &amp;#34;golang.org/x/oauth2/google&amp;#34;&#xD;&#xA;    &amp;#34;golang.org/x/oauth2/jwt&amp;#34;&#xD;&#xA;)&#xD;&#xA;&#xD;&#xA;func serviceAccount(credentialFile string) (*oauth2.Token, error) {&#xD;&#xA;    b, err := ioutil.ReadFile(credentialFile)&#xD;&#xA;    if err != nil {&#xD;&#xA;        return nil, err&#xD;&#xA;    }&#xD;&#xA;    var c = struct {&#xD;&#xA;        Email      string `json:&amp;#34;client_email&amp;#34;`&#xD;&#xA;        PrivateKey string `json:&amp;#34;private_key&amp;#34;`&#xD;&#xA;    }{}&#xD;&#xA;    json.Unmarshal(b, &amp;amp;c)&#xD;&#xA;    config := &amp;amp;jwt.Config{&#xD;&#xA;        Email:      c.Email,&#xD;&#xA;        PrivateKey: []byte(c.PrivateKey),&#xD;&#xA;        Scopes: []string{&#xD;&#xA;            &amp;#34;https://www.googleapis.com/auth/drive.metadata.readonly&amp;#34;,&#xD;&#xA;        },&#xD;&#xA;        TokenURL: google.JWTTokenURL,&#xD;&#xA;    }&#xD;&#xA;    token, err := config.TokenSource(oauth2.NoContext).Token()&#xD;&#xA;    if err != nil {&#xD;&#xA;        return nil, err&#xD;&#xA;    }&#xD;&#xA;    return token, nil&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;func main() {&#xD;&#xA;    token, err := serviceAccount(&amp;#34;credentials.json&amp;#34;) // Please set here&#xD;&#xA;    if err != nil {&#xD;&#xA;        fmt.Println(err)&#xD;&#xA;        os.Exit(1)&#xD;&#xA;    }&#xD;&#xA;    fmt.Println(res)&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Go Library - go-gettokenbyserviceaccount</title>
      <link>https://tanaikech.github.io/2018/12/11/go-library-go-gettokenbyserviceaccount/</link>
      <pubDate>Tue, 11 Dec 2018 14:42:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/11/go-library-go-gettokenbyserviceaccount/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Golang library to retrieve access token from &lt;a href=&#34;https://developers.google.com/identity/protocols/OAuth2ServiceAccount&#34;&gt;Service Account of Google&lt;/a&gt; without using &lt;a href=&#34;https://github.com/golang/oauth2&#34;&gt;Google&amp;rsquo;s OAuth2 package&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can get this from &lt;a href=&#34;https://github.com/tanaikech/go-gettokenbyserviceaccount&#34;&gt;https://github.com/tanaikech/go-gettokenbyserviceaccount&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Access Token for Service Account using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/12/07/retrieving-access-token-for-service-account-using-google-apps-script/</link>
      <pubDate>Fri, 07 Dec 2018 12:09:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/07/retrieving-access-token-for-service-account-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/20ea127a8e23a7c609f8d764c8b7ed7c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updated on June 22, 2024&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the access token for Service Account using Google Apps Script. The flow for using this script is as follows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create the Service Account and retrieve JSON file.&lt;/li&gt;&#xA;&lt;li&gt;Put Scopes, &lt;code&gt;private_key&lt;/code&gt; and &lt;code&gt;client_email&lt;/code&gt; as an object.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you want to use impersonate email, please set the value of &lt;code&gt;impersonate_email&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Run the script.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * ### Description&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * Get access token from service account.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * ref: https://tanaikech.github.io/2018/12/07/retrieving-access-token-for-service-account-using-google-apps-script/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {Object} object Object including private_key, client_email, impersonate_email.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {String} object.private_key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {String} object.client_email&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {String} object.impersonate_email&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @param {Array} object.scopes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @returns {String} Access token.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getAccessTokenFromServiceAccount_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;object&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;private_key&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;client_email&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;impersonate_email&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;scopes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [] } &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;object&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/oauth2/v4/token&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;alg&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RS256&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;typ&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JWT&amp;#34;&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt;(Date.&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;claim&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;iss&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;client_email&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;scope&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scopes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;aud&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;exp&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3600&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(), &lt;span style=&#34;color:#a6e22e&#34;&gt;iat&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;() };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;impersonate_email&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;claim&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sub&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;impersonate_email&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;base64Encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;)) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;base64Encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;claim&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;base64Encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;computeRsaSha256Signature&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;private_key&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;payload&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;assertion&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;grant_type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;urn:ietf:params:oauth:grant-type:jwt-bearer&amp;#34;&lt;/span&gt; } };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;access_token&lt;/span&gt; } &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;access_token&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Please run this script.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;object&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;private_key&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-----BEGIN PRIVATE KEY-----\n###-----END PRIVATE KEY-----\n&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;client_email&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// impersonate_email: &amp;#34;###&amp;#34;, // If you want to use an impersonate email, please set this.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;scopes&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;###&amp;#34;&lt;/span&gt;,,,],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getAccessTokenFromServiceAccount_&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;object&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script&lt;/h2&gt;&#xA;&lt;p&gt;When you can obtain the access token by the above script, you can also use the following sample script. The following sample script retrieves the file list of the drive of the service account with &lt;a href=&#34;https://developers.google.com/drive/api/reference/rest/v3/files/list&#34;&gt;Method: files.list of Drive API v3&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - DownloadLargeFilesByUrl</title>
      <link>https://tanaikech.github.io/2018/12/05/updated-gas-library-downloadlargefilesbyurl/</link>
      <pubDate>Wed, 05 Dec 2018 15:44:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/12/05/updated-gas-library-downloadlargefilesbyurl/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (December 5, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When the filename have not been retrieved, an error have occurred. This bug was removed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/DownloadLargeFilesByUrl&#34;&gt;https://github.com/tanaikech/DownloadLargeFilesByUrl&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v160</title>
      <link>https://tanaikech.github.io/2018/11/30/updated-ggsrun-to-v160/</link>
      <pubDate>Fri, 30 Nov 2018 10:44:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/30/updated-ggsrun-to-v160/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v160&#34;&gt;ggsrun was updated to v.1.6.0&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.6.0 (November 30, 2018)&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Although at ggsrun, files can be searched by filename and file ID, searching files using search query and regex couldn&amp;rsquo;t be done. From version 1.6.0, &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#searchfilesusingregex&#34;&gt;files got to be able to be searched using the search query and regex&lt;/a&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$ ggsrun sf -q &amp;quot;### search query ###&amp;quot; -f &amp;quot;### fields ###&amp;quot; -r &amp;quot;### regex ###&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Some modifications.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v121</title>
      <link>https://tanaikech.github.io/2018/11/25/updated-goodls-to-v121/</link>
      <pubDate>Sun, 25 Nov 2018 11:06:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/25/updated-goodls-to-v121/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.1 (November 25, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/goodls#v121&#34;&gt;API key got to be able to be used by an environment variable.&lt;/a&gt; When &lt;code&gt;GOODLS_APIKEY&lt;/code&gt; as the environment variable is set API key, goodls uses API key from the environment variable.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v120</title>
      <link>https://tanaikech.github.io/2018/11/24/updated-goodls-to-v120/</link>
      <pubDate>Sat, 24 Nov 2018 14:34:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/24/updated-goodls-to-v120/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.0 (November 24, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;By using API key, the shared large files can be run &lt;a href=&#34;https://github.com/tanaikech/goodls#resumabledownloadoffile&#34;&gt;&lt;strong&gt;the resumable download&lt;/strong&gt;&lt;/a&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This demonstration can be seen at &lt;a href=&#34;https://github.com/tanaikech/goodls#demo4&#34;&gt;Demo&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using String Values to []googleapi.Field for Golang</title>
      <link>https://tanaikech.github.io/2018/11/19/using-string-values-to-googleapi.field-for-golang/</link>
      <pubDate>Mon, 19 Nov 2018 08:32:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/19/using-string-values-to-googleapi.field-for-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/27d27a1ac7fa99503e0737c28db53056&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for using the string values to &lt;code&gt;[]googleapi.Field&lt;/code&gt; for Golang. The property of &lt;code&gt;fields&lt;/code&gt; can often be used to the Google APIs. When such APIs are used by the Go library, there are the cases that &lt;code&gt;fields&lt;/code&gt; parameter is required to be used. For example, at &lt;a href=&#34;https://developers.google.com/drive/api/v3/quickstart/go&#34;&gt;the quickstart of Drive API for golang&lt;/a&gt;, the value is directly put to &lt;code&gt;Fields()&lt;/code&gt; like &lt;code&gt;r, err := srv.Files.List().PageSize(10).Fields(&amp;quot;nextPageToken, files(id, name)&amp;quot;).Do()&lt;/code&gt;. For this situation, when the string value is put to &lt;code&gt;Fields()&lt;/code&gt; as follows,&lt;/p&gt;</description>
    </item>
    <item>
      <title>Directly Using Access Token by googleapis for Node.js</title>
      <link>https://tanaikech.github.io/2018/11/19/directly-using-access-token-by-googleapis-for-node.js/</link>
      <pubDate>Mon, 19 Nov 2018 07:35:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/19/directly-using-access-token-by-googleapis-for-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ca11c53356c5466e60109f79d9e4d9c9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for directly using the refreshed access token by googleapis for Node.js. When &lt;code&gt;oauth2Client.refreshAccessToken((err, tokens) =&amp;gt; {});&lt;/code&gt; is used to retrieve the refreshed access token, the following error occurs.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;DeprecationWarning: The &lt;code&gt;refreshAccess&#xD; Token&lt;/code&gt; method has been deprecated, and will be removed in the 3.0 release of goo&#xA;gle-auth-library. Please use the &lt;code&gt;getRequestHeaders&lt;/code&gt; method instead.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It is required to use &lt;code&gt;getRequestHeaders()&lt;/code&gt;. But I couldn&amp;rsquo;t find the sample script using &lt;code&gt;getRequestHeaders()&lt;/code&gt;. So I created this sample script. If this was useful for you, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving file list with folder structure under a specific folder in Google Drive</title>
      <link>https://tanaikech.github.io/2018/11/17/retrieving-file-list-with-folder-structure-under-a-specific-folder-in-google-drive/</link>
      <pubDate>Sat, 17 Nov 2018 15:56:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/17/retrieving-file-list-with-folder-structure-under-a-specific-folder-in-google-drive/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4fca197b8ec45c8ac6300b1531c2489d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When I create applications for using Google Drive, I often retrieve a file list from a folder in the application. So far, I had created the script for retrieving a file list from a folder for each application. Recently, I thought that if there is the script for retrieving the file list with the folder tree from the folder of Google Drive as a library, it will be useful for me and other users. So I created them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>python library - getfilelistpy</title>
      <link>https://tanaikech.github.io/2018/11/17/python-library-getfilelistpy/</link>
      <pubDate>Sat, 17 Nov 2018 15:11:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/17/python-library-getfilelistpy/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a python library to retrieve the file list with the folder tree from the specific folder of Google Drive.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When I create applications for using Google Drive, I often retrieve a file list from a folder in the application. So far, I had created the script for retrieving a file list from a folder for each application. Recently, I thought that if there is the script for retrieving the file list with the folder tree from the folder of Google Drive as a library, it will be useful for me and other users. So I created this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: node module - google-drive-getfilelist</title>
      <link>https://tanaikech.github.io/2018/11/16/updated-node-module-google-drive-getfilelist/</link>
      <pubDate>Fri, 16 Nov 2018 08:54:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/16/updated-node-module-google-drive-getfilelist/</guid>
      <description>&lt;h2 id=&#34;node-module---google-drive-getfilelist-was-updated-to-v103&#34;&gt;node module - google-drive-getfilelist was updated to v1.0.3&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (November 16, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Modified a bug.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can get this from &lt;a href=&#34;https://github.com/tanaikech/node-getfilelist&#34;&gt;https://github.com/tanaikech/node-getfilelist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can also get this from &lt;a href=&#34;https://www.npmjs.com/package/google-drive-getfilelist&#34;&gt;https://www.npmjs.com/package/google-drive-getfilelist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>node module - google-drive-getfilelist</title>
      <link>https://tanaikech.github.io/2018/11/14/node-module-google-drive-getfilelist/</link>
      <pubDate>Wed, 14 Nov 2018 12:28:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/14/node-module-google-drive-getfilelist/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a Node.js module to retrieve the file list with the folder tree from the specific folder of Google Drive.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When I create applications for using Google Drive, I often retrieve a file list from a folder in the application. So far, I had created the script for retrieving a file list from a folder for each application. Recently, I thought that if there is the script for retrieving the file list with the folder tree from the folder of Google Drive as a module, it will be useful for me and other users. So I created this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v111</title>
      <link>https://tanaikech.github.io/2018/11/13/updated-goodls-to-v111/</link>
      <pubDate>Tue, 13 Nov 2018 16:10:48 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/13/updated-goodls-to-v111/</guid>
      <description>&lt;h1 id=&#34;goodls-was-updated-to-v111&#34;&gt;goodls was updated to v.1.1.1&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.1 (November 13, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Version of &lt;a href=&#34;https://github.com/tanaikech/go-getfilelist&#34;&gt;go-getfilelist&lt;/a&gt; was updated. Because the structure of &lt;code&gt;drive.File&lt;/code&gt; got to be able to be used, I also updated this application.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Go Library - go-getfilelist to v101</title>
      <link>https://tanaikech.github.io/2018/11/13/updated-go-library-go-getfilelist-to-v101/</link>
      <pubDate>Tue, 13 Nov 2018 16:08:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/13/updated-go-library-go-getfilelist-to-v101/</guid>
      <description>&lt;h2 id=&#34;go-getfilelist-was-updated-to-v101&#34;&gt;go-getfilelist was updated to v1.0.1&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (November 13, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From this version, in order to retrieve files and file information, &amp;ldquo;google.golang.org/api/drive/v3&amp;rdquo; is used.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By this, when the values are retrieved from this library, users can use the structure of &lt;code&gt;drive.File&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Script using this library can be seen at &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;goodls&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can get this from &lt;a href=&#34;https://github.com/tanaikech/go-getfilelist&#34;&gt;https://github.com/tanaikech/go-getfilelist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ImgApp</title>
      <link>https://tanaikech.github.io/2018/11/05/updated-gas-library-imgapp/</link>
      <pubDate>Mon, 05 Nov 2018 14:17:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/05/updated-gas-library-imgapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;ImgApp&lt;/a&gt; was updated to v1.2.1.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.2.1 (November 5, 2018)&lt;/p&gt;&#xA;&lt;p&gt;Efficiency of each loop was enhanced by &lt;a href=&#34;https://gist.github.com/tanaikech/848aeafaac1ec676900bb78e3ce220b6&#34;&gt;this benchmark&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;https://github.com/tanaikech/ImgApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v152</title>
      <link>https://tanaikech.github.io/2018/11/04/updated-ggsrun-to-v152/</link>
      <pubDate>Sun, 04 Nov 2018 13:10:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/04/updated-ggsrun-to-v152/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v152&#34;&gt;ggsrun was updated to v.1.5.2&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.5.2 (November 4, 2018)&#xA;&lt;ol&gt;&#xA;&lt;li&gt;About &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#downloadfilesfromfolder&#34;&gt;downloading folders&lt;/a&gt;, when files are downloaded from a folder, you can download Google Docs files with the mimeType you want. For example, when you download files from the folder, if &lt;code&gt;-e txt&lt;/code&gt; is used, Google Docs are downloaded as the text file. When &lt;code&gt;-e pdf&lt;/code&gt; is used, they are downloaded as the PDF file. Of course, there are mimeType which cannot be converted.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$ ggsrun d -f [folderName] -e txt -j&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;About &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#uploadfiles&#34;&gt;uploading files&lt;/a&gt;, when files are uploaded from your local PC, the files got to be able to be converted to Google Docs. For this, new option of &lt;code&gt;--convertto&lt;/code&gt;, &lt;code&gt;-c&lt;/code&gt; is added. For example, when a text file is uploaded, if you use &lt;code&gt;-c doc&lt;/code&gt;, the text file is uploaded as Google Document.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$ ggsrun u -f [fileName] -c doc -j&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v110</title>
      <link>https://tanaikech.github.io/2018/11/04/updated-goodls-to-v110/</link>
      <pubDate>Sun, 04 Nov 2018 12:26:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/04/updated-goodls-to-v110/</guid>
      <description>&lt;h1 id=&#34;goodls-was-updated-to-v110&#34;&gt;goodls was updated to v.1.1.0&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.1.0 (November 4, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;By using API key, files from &lt;strong&gt;the shared folder&lt;/strong&gt; got to be able to be downloaded while keeping the folder structure.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This demonstration can be seen at &lt;a href=&#34;https://github.com/tanaikech/goodls#demo3&#34;&gt;Demo&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;By using API key, the information of shared file and folder can be also retrieved.&lt;/li&gt;&#xA;&lt;li&gt;About the option of &lt;code&gt;--extension&lt;/code&gt; and &lt;code&gt;-e&lt;/code&gt;, when &lt;code&gt;-e ms&lt;/code&gt; is used, Google Docs (Document, Spreadsheet, Slides) are converted to Microsoft Docs (Word, Excel, Powerpoint), respectively.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v151</title>
      <link>https://tanaikech.github.io/2018/11/02/updated-ggsrun-to-v151/</link>
      <pubDate>Fri, 02 Nov 2018 14:18:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/02/updated-ggsrun-to-v151/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v151&#34;&gt;ggsrun was updated to v.1.5.1&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.5.1 (November 2, 2018)&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Removed a bug.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When a file information was retrieved, createdTime and modifiedTime couldn&amp;rsquo;t be seen and the information was incomplete.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Library - go-getfilelist</title>
      <link>https://tanaikech.github.io/2018/11/02/go-library-go-getfilelist/</link>
      <pubDate>Fri, 02 Nov 2018 14:01:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/11/02/go-library-go-getfilelist/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a Golang library to retrieve the file list with the folder tree from the specific folder of Google Drive.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When I create applications for using Google Drive, I often retrieve a file list from a folder in the application. So far, I had created the script for retrieving a file list from a folder for each application. Recently, I thought that if there is the script for retrieving the file list with the folder tree from the folder of Google Drive as a library, it will be useful for me and other users. So I created this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v150</title>
      <link>https://tanaikech.github.io/2018/10/27/updated-ggsrun-to-v150/</link>
      <pubDate>Sat, 27 Oct 2018 16:01:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/10/27/updated-ggsrun-to-v150/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v150&#34;&gt;ggsrun was updated to v.1.5.0&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.5.0 (October 27, 2018)&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#downloadfilesfromfolder&#34;&gt;From this version, ggsrun got to be able to download all files and folders in the specific folder in Google Drive.&lt;/a&gt; When all files are downloaded from a folder, the same folder structure of Google Drive is created to the local PC.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$ ggsrun d -f folderName or folderId&lt;/code&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the project file is downloaded, it is downloaded as a zip file. All scripts in the project is put in the zip file.&lt;/li&gt;&#xA;&lt;li&gt;Also when you download a single project, you can use an option &lt;code&gt;--zip&lt;/code&gt; or &lt;code&gt;-z&lt;/code&gt;. By this, the downloaded project is saved as a zip file.&lt;/li&gt;&#xA;&lt;li&gt;This new function can be also used for the shared folders. When you want to download the files from the shared folder, please use the folder ID of the shared folder.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The file list with the folder tree in the specific folder got to be able to be retrieved.&lt;/li&gt;&#xA;&lt;li&gt;When the files are downloaded, the progression got to be able to be seen. When you want to see the progression, please use &lt;code&gt;-j&lt;/code&gt; when you download files and folders.&lt;/li&gt;&#xA;&lt;li&gt;Files with large size got to be able to be used. In order to download files with large size (several gigabytes), files are saved by chunks.&lt;/li&gt;&#xA;&lt;li&gt;Some modifications.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can check ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zip Compression of Downloaded File using Golang</title>
      <link>https://tanaikech.github.io/2018/10/23/zip-compression-of-downloaded-file-using-golang/</link>
      <pubDate>Tue, 23 Oct 2018 16:59:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/10/23/zip-compression-of-downloaded-file-using-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0d91da9888393e6ee737a67c57eeab70&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for creating a downloaded file as a zip file using Golang. The downloaded file is not created to a file as a temporal file. The zip file is directly created. When you use this, please modify &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;downloadedFileName&lt;/code&gt; and &lt;code&gt;zipFileName&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script&#34;&gt;Sample script:&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;archive/zip&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bytes&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;io&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;io/ioutil&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;net/http&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://localhost/sample.png&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;downloadedFileName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample.png&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;zipFileName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample.zip&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Get&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ioutil&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadAll&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fprintf&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Stderr&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: %v. &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Exit&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;buf&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; new(&lt;span style=&#34;color:#a6e22e&#34;&gt;bytes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Buffer&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;w&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewWriter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;buf&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fh&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;FileHeader&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;:     &lt;span style=&#34;color:#a6e22e&#34;&gt;downloadedFileName&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;Modified&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Now&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;Method&lt;/span&gt;:   &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;w&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;CreateHeader&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fh&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Write&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;); &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;w&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Create&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;zipFileName&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;io&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Copy&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;buf&lt;/span&gt;); &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Done.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;note&#34;&gt;Note:&lt;/h2&gt;&#xA;&lt;p&gt;As an important point, when the file is downloaded, os.FileInfo cannot be used. So in this situation, it uses zip.FileHeader. At that time, please remember to set &lt;code&gt;Method&lt;/code&gt;. &lt;code&gt;Method&lt;/code&gt; is 0 as the default. This means no compression. The sample script uses 8 to &lt;code&gt;Method&lt;/code&gt;. This means the DEFLATE method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Reading and Writing Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/10/12/benchmark-reading-and-writing-spreadsheet-using-google-apps-script/</link>
      <pubDate>Fri, 12 Oct 2018 10:42:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/10/12/benchmark-reading-and-writing-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d102c9600ba12a162c667287d2f20fe4&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;TOP&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;benchmark-reading-and-writing-spreadsheet-using-google-apps-script&#34;&gt;Benchmark: Reading and Writing Spreadsheet using Google Apps Script&lt;/h1&gt;&#xA;&lt;center&gt;&#xD;&#xA;October 12, 2018&#xD;&#xA;    Published.&#xD;&#xA;&lt;p&gt;October 18, 2018&#xA;Updated.&#xA;In order to compare with Advanced Google Service, a result of Sheets API by UrlFetchApp was added to &lt;a href=&#34;#Appendix&#34;&gt;Appendix&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please be careful! This result can be only used for Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are a limit executing time for Google Apps Script (GAS). That is 6 minutes for Consumer and Google Apps free edition, and 30 minutes for G Suite and Early Access. &lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; So many users always have to pay attention to reducing the process cost of scripts. So it is very important to know the process cost of various situations. I have already reported the costs for various processes as the reports. &lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; In this report, the process cost for reading and writing values for Spreadsheet using GAS has been investigated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - ArrangeStackingOrder</title>
      <link>https://tanaikech.github.io/2018/10/10/gas-library-arrangestackingorder/</link>
      <pubDate>Wed, 10 Oct 2018 09:11:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/10/10/gas-library-arrangestackingorder/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;ArrangeStackingOrder is a GAS library for arranging the stacking order of page elements on Google Slides using Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;h1 id=&#34;demo&#34;&gt;Demo&lt;/h1&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/ArrangeStackingOrder/raw/master/images/demo.gif&#34;&#xA;     alt=&#34;GAS Library - ArrangeStackingOrder&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a demonstration of this library when this is used as a Google Slides Addon.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Do you have situations that you want to arrange the stacking order of page elements on Google Slides using GAS? I had it before. At that time, I could achieve it by creating a simple script. Recently, I found that users who have the same situation. I thought that if there is a library for this, it will be useful for me and other developers. So I created this. If this was useful for your situation, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Joined to Skillshare.com</title>
      <link>https://tanaikech.github.io/2018/10/03/joined-to-skillshare.com/</link>
      <pubDate>Wed, 03 Oct 2018 14:28:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/10/03/joined-to-skillshare.com/</guid>
      <description>&lt;p&gt;Recently, I was invited to &lt;a href=&#34;https://www.skillshare.com/&#34;&gt;Skillshare.com&lt;/a&gt;. They said that &amp;ldquo;will you teach about Google Apps Script?&amp;rdquo;. I thought that if I can be helpful for other users, I&amp;rsquo;m glad. So I joined to there and created &lt;strong&gt;&lt;a href=&#34;https://www.skillshare.com/classes/Taking-Advantage-of-Google-Apps-Script/1310511232&#34;&gt;a presentation&lt;/a&gt;&lt;/strong&gt;. I would like to create more classed in the future. If those were helpful for you, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Asynchronous Processing using Event Triggers</title>
      <link>https://tanaikech.github.io/2018/09/21/asynchronous-processing-using-event-triggers/</link>
      <pubDate>Fri, 21 Sep 2018 17:00:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/09/21/asynchronous-processing-using-event-triggers/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/88f7fd5ed14da5e9afde18310da61cb5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;center&gt;&#xD;&#xA;September 21, 2018&#xD;&#xA;    Published.&#xD;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a report about the possibility of asynchronous process using event triggers. This is for Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;onEdit()&lt;/code&gt; which is &lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers/&#34;&gt;a simple trigger&lt;/a&gt; is often used as a trigger when the values are modified on Spreadsheet. When users want to use the script including some methods which are required to be authorized as the onEdit event, &lt;a href=&#34;https://developers.google.com/apps-script/guides/triggers/installable&#34;&gt;a installable trigger&lt;/a&gt; of onEdit is used. If the trigger is installed for the function of &lt;code&gt;onEdit()&lt;/code&gt;, when the event trigger is run, &lt;code&gt;onEdit()&lt;/code&gt; is run 2 times. In order to avoid this, the installable trigger is installed to the functions except for the functions of simple triggers. The functions of simple triggers which is the same events are not used in the project. When I thought about this situation, I thought that both &lt;code&gt;onEdit()&lt;/code&gt; which is run by the simple trigger and the function which is run by the installable trigger might be able to be used, simultaneously. So I investigated about this situation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - RangeListApp</title>
      <link>https://tanaikech.github.io/2018/09/13/updated-gas-library-rangelistapp/</link>
      <pubDate>Thu, 13 Sep 2018 13:53:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/09/13/updated-gas-library-rangelistapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/RangeListApp&#34;&gt;RangeListApp&lt;/a&gt; was updated to v1.0.1.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (September 13, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#expandA1Notations&#34;&gt;New method of &amp;ldquo;expandA1Notations&amp;rdquo;&lt;/a&gt; was added. This method can expand the a1Notations. For example, &lt;code&gt;A1:C2&lt;/code&gt; is expanded to &lt;code&gt;&amp;quot;A1&amp;quot;,&amp;quot;B1&amp;quot;,&amp;quot;C1&amp;quot;,&amp;quot;A2&amp;quot;,&amp;quot;B2&amp;quot;,&amp;quot;C2&amp;quot;&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/RangeListApp&#34;&gt;https://github.com/tanaikech/RangeListApp&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Expanding A1Notations using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/09/08/expanding-a1notations-using-google-apps-script/</link>
      <pubDate>Sat, 08 Sep 2018 10:57:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/09/08/expanding-a1notations-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c59b90324c90935b13f9e7b26cbf436a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for expanding a1Notations using Google Apps Script (GAS). In this script, for example, &amp;ldquo;A1:E3&amp;rdquo; is expanded to &amp;ldquo;A1, B1, C1, D1, E1, A2, B2, C2, D2, E2, A3, B3, C3, D3, E3&amp;rdquo;. When each cell in &amp;ldquo;A1:E3&amp;rdquo; is checked, this script might be able to be used. If this was useful for your situation, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;h2 id=&#34;script&#34;&gt;Script:&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;expandA1Notation&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a1Notations&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;columnToLetter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; String.&lt;span style=&#34;color:#a6e22e&#34;&gt;fromCharCode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;65&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letterToColumn&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;letter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;charCodeAt&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;pow&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;column&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reg&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RegExp(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;([A-Z]+)([0-9]+)&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1Notations&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;!&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;) {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toUpperCase&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;reg&lt;/span&gt;)});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;startRowIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;endRowIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; Number(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;startColumnIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letterToColumn&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;endColumnIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letterToColumn&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letterToColumn&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;rr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;startRowIndex&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;endRowIndex&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;startColumnIndex&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;endColumnIndex&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;columnToLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// When you use this script, please run main().&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1Notations&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1:E3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;B10:W13&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EZ5:FA8&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;AAA1:AAB3&amp;#34;&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;expandA1Notation&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a1Notations&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;result&#34;&gt;Result:&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[&#xD;&#xA;  [&amp;#34;A1&amp;#34;,&amp;#34;B1&amp;#34;,&amp;#34;C1&amp;#34;,&amp;#34;D1&amp;#34;,&amp;#34;E1&amp;#34;,&amp;#34;A2&amp;#34;,&amp;#34;B2&amp;#34;,&amp;#34;C2&amp;#34;,&amp;#34;D2&amp;#34;,&amp;#34;E2&amp;#34;,&amp;#34;A3&amp;#34;,&amp;#34;B3&amp;#34;,&amp;#34;C3&amp;#34;,&amp;#34;D3&amp;#34;,&amp;#34;E3&amp;#34;],&#xD;&#xA;  [&amp;#34;B10&amp;#34;,&amp;#34;C10&amp;#34;,&amp;#34;D10&amp;#34;,&amp;#34;E10&amp;#34;,&amp;#34;F10&amp;#34;,&amp;#34;G10&amp;#34;,&amp;#34;H10&amp;#34;,&amp;#34;I10&amp;#34;,&amp;#34;J10&amp;#34;,&amp;#34;K10&amp;#34;,&amp;#34;L10&amp;#34;,&amp;#34;M10&amp;#34;,&amp;#34;N10&amp;#34;,&amp;#34;O10&amp;#34;,&amp;#34;P10&amp;#34;,&amp;#34;Q10&amp;#34;,&amp;#34;R10&amp;#34;,&amp;#34;S10&amp;#34;,&amp;#34;T10&amp;#34;,&amp;#34;U10&amp;#34;,&amp;#34;V10&amp;#34;,&amp;#34;W10&amp;#34;,&amp;#34;B11&amp;#34;,&amp;#34;C11&amp;#34;,&amp;#34;D11&amp;#34;,&amp;#34;E11&amp;#34;,&amp;#34;F11&amp;#34;,&amp;#34;G11&amp;#34;,&amp;#34;H11&amp;#34;,&amp;#34;I11&amp;#34;,&amp;#34;J11&amp;#34;,&amp;#34;K11&amp;#34;,&amp;#34;L11&amp;#34;,&amp;#34;M11&amp;#34;,&amp;#34;N11&amp;#34;,&amp;#34;O11&amp;#34;,&amp;#34;P11&amp;#34;,&amp;#34;Q11&amp;#34;,&amp;#34;R11&amp;#34;,&amp;#34;S11&amp;#34;,&amp;#34;T11&amp;#34;,&amp;#34;U11&amp;#34;,&amp;#34;V11&amp;#34;,&amp;#34;W11&amp;#34;,&amp;#34;B12&amp;#34;,&amp;#34;C12&amp;#34;,&amp;#34;D12&amp;#34;,&amp;#34;E12&amp;#34;,&amp;#34;F12&amp;#34;,&amp;#34;G12&amp;#34;,&amp;#34;H12&amp;#34;,&amp;#34;I12&amp;#34;,&amp;#34;J12&amp;#34;,&amp;#34;K12&amp;#34;,&amp;#34;L12&amp;#34;,&amp;#34;M12&amp;#34;,&amp;#34;N12&amp;#34;,&amp;#34;O12&amp;#34;,&amp;#34;P12&amp;#34;,&amp;#34;Q12&amp;#34;,&amp;#34;R12&amp;#34;,&amp;#34;S12&amp;#34;,&amp;#34;T12&amp;#34;,&amp;#34;U12&amp;#34;,&amp;#34;V12&amp;#34;,&amp;#34;W12&amp;#34;,&amp;#34;B13&amp;#34;,&amp;#34;C13&amp;#34;,&amp;#34;D13&amp;#34;,&amp;#34;E13&amp;#34;,&amp;#34;F13&amp;#34;,&amp;#34;G13&amp;#34;,&amp;#34;H13&amp;#34;,&amp;#34;I13&amp;#34;,&amp;#34;J13&amp;#34;,&amp;#34;K13&amp;#34;,&amp;#34;L13&amp;#34;,&amp;#34;M13&amp;#34;,&amp;#34;N13&amp;#34;,&amp;#34;O13&amp;#34;,&amp;#34;P13&amp;#34;,&amp;#34;Q13&amp;#34;,&amp;#34;R13&amp;#34;,&amp;#34;S13&amp;#34;,&amp;#34;T13&amp;#34;,&amp;#34;U13&amp;#34;,&amp;#34;V13&amp;#34;,&amp;#34;W13&amp;#34;],&#xD;&#xA;  [&amp;#34;EZ5&amp;#34;,&amp;#34;FA5&amp;#34;,&amp;#34;EZ6&amp;#34;,&amp;#34;FA6&amp;#34;,&amp;#34;EZ7&amp;#34;,&amp;#34;FA7&amp;#34;,&amp;#34;EZ8&amp;#34;,&amp;#34;FA8&amp;#34;],&#xD;&#xA;  [&amp;#34;AAA1&amp;#34;,&amp;#34;AAB1&amp;#34;,&amp;#34;AAA2&amp;#34;,&amp;#34;AAB2&amp;#34;,&amp;#34;AAA3&amp;#34;,&amp;#34;AAB3&amp;#34;]&#xD;&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This script uses 2 methods (&lt;a href=&#34;https://stackoverflow.com/a/21231012/7108653&#34;&gt;https://stackoverflow.com/a/21231012/7108653&lt;/a&gt;) for converting from index to letter and from letter to index.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v103</title>
      <link>https://tanaikech.github.io/2018/09/04/updated-goodls-to-v103/</link>
      <pubDate>Tue, 04 Sep 2018 11:30:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/09/04/updated-goodls-to-v103/</guid>
      <description>&lt;h1 id=&#34;goodls-was-updated-to-v103&#34;&gt;goodls was updated to v.1.0.3&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (September 4, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When the files are downloaded, the progress of downloading got to be able to be displayed.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This scene can be seen at &lt;a href=&#34;https://github.com/tanaikech/goodls#demo2&#34;&gt;this demonstration video&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If the new option of &lt;code&gt;--np&lt;/code&gt; is used, the progress is not displayed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - FilesApp</title>
      <link>https://tanaikech.github.io/2018/09/03/updated-gas-library-filesapp/</link>
      <pubDate>Mon, 03 Sep 2018 09:12:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/09/03/updated-gas-library-filesapp/</guid>
      <description>&lt;p&gt;FilesApp was updated to v1.0.1.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Removed a bug.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When there are files and folders without the parents, an error occurred. In this version, this issue was removed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/FilesApp&#34;&gt;GitHub of FilesApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - DownloadLargeFilesByUrl</title>
      <link>https://tanaikech.github.io/2018/09/02/gas-library-downloadlargefilesbyurl/</link>
      <pubDate>Sun, 02 Sep 2018 10:54:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/09/02/gas-library-downloadlargefilesbyurl/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;DownloadLargeFilesByUrl is a GAS library for downloading large files from URL to Google Drive using Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;I had been thinking of about whether a large file from an URL can be downloaded to Google Drive using GAS. When I have tried to download such large files, I noticed the following limitations. These limitations are due to the specification of GAS.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When users download a file from URL using GAS, at the most users, it retrieves the blob using &lt;code&gt;UrlFetchApp.fetch(url).getBlob()&lt;/code&gt; and saves it as a file using &lt;code&gt;DriveApp.createFile(blob)&lt;/code&gt;. In this case, only files less than 50 MB (52,428,800 bytes) can be created, because of the size limitation of Blob.&lt;/li&gt;&#xA;&lt;li&gt;There are a limit executing time for Google Apps Script (GAS). That is 6 min/execution.&lt;/li&gt;&#xA;&lt;li&gt;There are a limit of total executing time for running scripts by triggers. That is 90 min/day. (Recently, it became from 60 min/day to 90 min/day.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When it tries to create the application for downloading the large files, it is required to consider above limitations. On the other hand, there are the following relaxations of quotas by the recent Google&amp;rsquo;s update.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enhanced makeCopy() using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/08/23/enhanced-makecopy-using-google-apps-script/</link>
      <pubDate>Thu, 23 Aug 2018 14:28:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/08/23/enhanced-makecopy-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ac1b0d50fe1ffaa40e95bbe9faf908b9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is sample scripts for copying files to a specific folder in Google Drive using Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When the files in Google Drive are copied to a specific folder using GAS, most users will use &lt;a href=&#34;https://developers.google.com/apps-script/reference/drive/file#makecopydestination&#34;&gt;makeCopy(destination)&lt;/a&gt;. When the files are copied using makeCopy(), you might have already noticed that only the standalone projects cannot be copied to the specific folder. They are copied to the root folder (My Drive). Also this situation can be also seen even when &amp;ldquo;copy&amp;rdquo; of Drive API v2 and v3 is used. I think that this might be a bug. So I would like to introduce 2 sample scripts as the workaround. In the workaround, it uses Drive API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing Text to Image for Google Document using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/08/20/replacing-text-to-image-for-google-document-using-google-apps-script/</link>
      <pubDate>Mon, 20 Aug 2018 09:55:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/08/20/replacing-text-to-image-for-google-document-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f84831455dea5c394e48caaee0058b26&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for replacing text to image for Google Document using Google Apps Script (GAS). There is &lt;a href=&#34;https://developers.google.com/apps-script/reference/document/text#replaceText(String,String)&#34;&gt;a method for replacing text to text&lt;/a&gt; at Class Text of DocumentApp. But there are not methods for replacing text to image. So I created this sample script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo-&#34;&gt;Demo :&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20180820a_demo.gif&#34;&#xA;     alt=&#34;Replacing Text to Image for Google Document using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This sample image was created by &lt;a href=&#34;https://www.deviantart.com/k3-studio/art/Colorful-triangles-288890875&#34;&gt;k3-studio&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage-&#34;&gt;Usage :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;replaceTextToImage&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;replaceText&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;body&lt;/code&gt; : body of document. You can set by &lt;code&gt;DocumentApp.getActiveDocument().getBody()&lt;/code&gt; and &lt;code&gt;DocumentApp.openById(documentId).getBody()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;replaceText&lt;/code&gt; : string you want to replace.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;image&lt;/code&gt; : blob of image you want to replace.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;width&lt;/code&gt; : Width of replaced image. The aspect ratio is constant. The unit is pixels. If you don&amp;rsquo;t use this, the original size is used.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;script-&#34;&gt;Script :&lt;/h2&gt;&#xA;&lt;p&gt;In this sample script, all strings of &amp;ldquo;sample&amp;rdquo; in the document are replaced to image with the file ID of &lt;code&gt;imageFileId&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Upload Files to Google Drive using Javascript</title>
      <link>https://tanaikech.github.io/2018/08/13/upload-files-to-google-drive-using-javascript/</link>
      <pubDate>Mon, 13 Aug 2018 10:16:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/08/13/upload-files-to-google-drive-using-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/bd53b366aedef70e35a35f449c51eced&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;news&#34;&gt;News&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/tanaikech/ResumableUploadForGoogleDrive_js&#34;&gt;At October 11, 2019, I published a Javascript library to to run the resumable upload for Google Drive.&lt;/a&gt; When this is used, the large file can be uploaded. You can also use this js library.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample script for uploading files to Google Drive using Javascript. The files are uploaded by &lt;a href=&#34;https://developers.google.com/drive/api/v3/reference/&#34;&gt;Drive API v3&lt;/a&gt;. &lt;code&gt;gapi.client.drive.files.create()&lt;/code&gt; can create an empty file on Google Drive. But it cannot directly upload files including contents. I think that this might not be able to upload files and metadata with the multipart/related, although this might be resolved by the future update. So now, as one of workarounds, I use using XMLHttpRequest.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Decreasing Loop for Array Processing using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/08/11/benchmark-decreasing-loop-for-array-processing-using-google-apps-script/</link>
      <pubDate>Sat, 11 Aug 2018 16:25:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/08/11/benchmark-decreasing-loop-for-array-processing-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fdd8462a46179efb156cfa0550695c6e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;TOP&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;benchmark-decreasing-loop-for-array-processing-using-google-apps-script&#34;&gt;Benchmark: Decreasing Loop for Array Processing using Google Apps Script&lt;/h1&gt;&#xA;&lt;center&gt;&#xD;&#xA;August 11, 2018&#xD;&#xA;    Published.&#xD;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please be careful! This result can be only used for Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are a limit executing time for Google Apps Script (GAS). That is 6 minutes. &lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; So users always have to pay attention to reducing the process cost of the scripts. Especially, it is very important to know the process cost for the array processing, because the array processing is often used for spreadsheet and Google APIs. I have already reported the process costs for various processes as reports. &lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;2-7&lt;/sup&gt;&lt;/a&gt; In this report, the process cost of &amp;ldquo;Decreasing loop&amp;rdquo; for the array processing using GAS has been investigated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Screen Shots of Sites using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/08/05/retrieving-screen-shots-of-sites-using-google-apps-script/</link>
      <pubDate>Sun, 05 Aug 2018 14:34:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/08/05/retrieving-screen-shots-of-sites-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a434b4ed50d91fe5f56fffcf6bcb3f78&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving screen shots of sites using Google Apps Script. In order to retrieve the screen shot, here, I used &lt;a href=&#34;https://developers.google.com/speed/docs/insights/v4/reference/&#34;&gt;PageSpeed API&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When you use this, please copy and paste the following script, and set an URL you want to retrieve a screen shot.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;siteUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### URL you want to retrieve a screen shot. ###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/pagespeedonline/v4/runPagespeed?screenshot=true&amp;amp;fields=screenshot&amp;amp;url=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  encodeURIComponent(&lt;span style=&#34;color:#a6e22e&#34;&gt;siteUrl&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;base64DecodeWebSafe&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;screenshot&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;image/png&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample.png&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;note-&#34;&gt;Note :&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Retrieved value of screen shot is a base64 data with Web Safe.&lt;/li&gt;&#xA;&lt;li&gt;In my environment, when I ran this script as a test, it was not required to enable this API at API console. And also I used no API key. If you want to retrieve values from a lot of URLs, it might be required to enable API and use API key.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;updated-at-december-9-2021&#34;&gt;Updated at December 9, 2021&lt;/h2&gt;&#xA;&lt;p&gt;Now, version 5 can be used. The script is as follows. In this case, please add the scope as the value of &lt;code&gt;openid&lt;/code&gt;. By this, the access token can be used. Although this sample script uses the access token, of course, you can also use the API key instead of the access token.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2018/07/28/updated-gas-library-onedriveapp/</link>
      <pubDate>Sat, 28 Jul 2018 16:27:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/28/updated-gas-library-onedriveapp/</guid>
      <description>&lt;p&gt;OnedriveApp was updated to v1.1.1.&lt;/p&gt;&#xA;&lt;p&gt;I have to apologize you and all users.&lt;/p&gt;&#xA;&lt;p&gt;I had forgot that it added setProp(). I could notice about this by reporting at &lt;a href=&#34;https://github.com/tanaikech/OnedriveApp/issues/3&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I would like to report because I could remove this bug.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;GitHub of OnedriveApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - RangeListApp</title>
      <link>https://tanaikech.github.io/2018/07/27/gas-library-rangelistapp/</link>
      <pubDate>Fri, 27 Jul 2018 13:52:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/27/gas-library-rangelistapp/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;RangeListApp is a GAS library for retrieving, putting and replacing values for Spreadsheet by a range list with a1Notation using Google Apps Script (GAS).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;There is &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/range-list&#34;&gt;Class RangeList&lt;/a&gt; as one of classes for Spreadsheet. There is &lt;code&gt;setValue(value)&lt;/code&gt; in Class RangeList as a method. &lt;code&gt;setValue(value)&lt;/code&gt; puts &lt;code&gt;value&lt;/code&gt; to the cells of range list. Recently, when I used this method, I noticed that the following situations what I want cannot be achieved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: Benchmark: Loop for Array Processing using Google Apps Script without V8</title>
      <link>https://tanaikech.github.io/2018/07/26/updated-benchmark-loop-for-array-processing-using-google-apps-script-without-v8/</link>
      <pubDate>Thu, 26 Jul 2018 09:29:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/26/updated-benchmark-loop-for-array-processing-using-google-apps-script-without-v8/</guid>
      <description>&lt;p&gt;I updated the report of &amp;ldquo;Benchmark: Loop for Array Processing using Google Apps Script&amp;rdquo;. In this update, &amp;ldquo;reduce&amp;rdquo; was added. If this report is useful for your situation, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://gist.github.com/tanaikech/848aeafaac1ec676900bb78e3ce220b6&#34;&gt;https://gist.github.com/tanaikech/848aeafaac1ec676900bb78e3ce220b6&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notifying with email when Netatmo was down</title>
      <link>https://tanaikech.github.io/2018/07/20/notifying-with-email-when-netatmo-was-down/</link>
      <pubDate>Fri, 20 Jul 2018 16:38:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/20/notifying-with-email-when-netatmo-was-down/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a Google Apps Script for notifying with email when Netatmo was down.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;m measuring the surrounding environment using Netatmo. There were little that my Netatmo was down so far. But recently, my Netatmo is sometimes down. It is considered that the reason is due to the thermal runaway, because the recent Japan is very hot. When Netatmo was down, users can know it by logging in using the browser and/or running the mobile application. But I couldn&amp;rsquo;t find the applications and methods for automatically noticing that the Netatmo was down. So I thought that this can be achieved using Netatmo API and Google Apps Script. And I created this. If this is also useful for other Netatmo&amp;rsquo;s users, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieve Last of Specific Row and Column</title>
      <link>https://tanaikech.github.io/2018/07/16/retrieve-last-of-specific-row-and-column/</link>
      <pubDate>Mon, 16 Jul 2018 12:59:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/16/retrieve-last-of-specific-row-and-column/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/044d8651aed41c886f3379fdf5165aa2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving the last coordinate of the specific row and column. When the methods of &lt;code&gt;getLastRow()&lt;/code&gt; and &lt;code&gt;getLastColumn()&lt;/code&gt; of Class Range for Spreadsheet are used, the last coordinates of the vertical and horizontal data range can be retrieved. When users want to retrieve the last coordinates of each row and column, there are no methods. So I created this script. I think that there are several scripts for this situation. So please think of this as one of them. If this was useful for you, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notifying Comments at Stackoverflow by Email using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/07/13/notifying-comments-at-stackoverflow-by-email-using-google-apps-script/</link>
      <pubDate>Fri, 13 Jul 2018 16:32:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/13/notifying-comments-at-stackoverflow-by-email-using-google-apps-script/</guid>
      <description>&lt;p&gt;This is a script for sending an email when users got comments at Stackoverflow. I had wished I could get an email when I got a comment at Stackoverflow. Although I investigated about this, it seems that I can get the email every 3 hours. For this situation, I wished I could get it much earlier. I thought that this can be achieved using GAS and Stack Exchange API. So I created this script. The features of this script are as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding Query Parameters to URL using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/07/12/adding-query-parameters-to-url-using-google-apps-script/</link>
      <pubDate>Thu, 12 Jul 2018 08:53:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/12/adding-query-parameters-to-url-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/70503e0ea6998083fcb05c6d2a857107&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;updated-on-february-5-2024&#34;&gt;Updated on February 5, 2024&lt;/h1&gt;&#xA;&lt;p&gt;This is for adding the query parameters to the URL. These scripts can be also used for Javascript. When I created an endpoint with some query parameters, I had used the scripts of various patterns every time. Today, I prepared this sample script to unify them. If this is also useful for you, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-with-v8-runtime&#34;&gt;Sample script (With V8 runtime):&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;String.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addQuery&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;?`&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;entries&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;flatMap&lt;/span&gt;(([&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;]) =&amp;gt; Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;isArray&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;encodeURIComponent(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;encodeURIComponent(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;amp;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction1&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://sampleUrl&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;query1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1A&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1B&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1C&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;query2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2A, value2B&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;query3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3A/value3B&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endpoint&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addQuery&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;endpoint&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// https://sampleUrl?query1=value1A&amp;amp;query1=value1B&amp;amp;query1=value1C&amp;amp;query2=value2A%2C%20value2B&amp;amp;query3=value3A%2Fvalue3B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// In this case, only the query parameter is exported. This value can be used for requesting with Form data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction2&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;query1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1A&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1B&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1C&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;query2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2A, value2B&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;query3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3A/value3B&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endpoint&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addQuery&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;endpoint&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// query1=value1A&amp;amp;query1=value1B&amp;amp;query1=value1C&amp;amp;query2=value2A%2C%20value2B&amp;amp;query3=value3A%2Fvalue3B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jsfiddle.net/f92arp5m/&#34;&gt;https://jsfiddle.net/f92arp5m/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sample-script-without-v8-runtime&#34;&gt;Sample script (Without V8 runtime):&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;String.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addQuery&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;?&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;amp;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;isArray&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; encodeURIComponent(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;amp;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; encodeURIComponent(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;]));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://sampleUrl&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;query1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1A&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1B&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1C&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;query2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2A, value2B&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;query3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3A/value3B&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;endpoint&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addQuery&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;endpoint&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jsfiddle.net/jka8u3wx/&#34;&gt;https://jsfiddle.net/jka8u3wx/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;result&#34;&gt;Result:&lt;/h2&gt;&#xA;&lt;p&gt;Both sample scripts return the following URL including the query parameters.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Conditional Branch using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/07/11/benchmark-conditional-branch-using-google-apps-script/</link>
      <pubDate>Wed, 11 Jul 2018 13:36:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/11/benchmark-conditional-branch-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/cef47530a58f2d8692cdb1a9d257907b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;TOP&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;benchmark-conditional-branch-using-google-apps-script&#34;&gt;Benchmark: Conditional Branch using Google Apps Script&lt;/h1&gt;&#xA;&lt;center&gt;&#xD;&#xA;July 11, 2018&#xD;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please be careful! This result can be only used for Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are a limit executing time for Google Apps Script (GAS). That is 6 minutes.&lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; So users always have to pay attention to reducing the process cost of the scripts. Especially, it is very important to know the process cost for the array processing, because the array processing is often used for spreadsheet and Google APIs. Recently, I have already published some reports about the process cost using GAS.&lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;2-6&lt;/sup&gt;&lt;/a&gt; From these reports, it has found that GAS shows much different process cost from other languages. So it is important to investigate the process cost for various scenes. In this report, the process cost of &amp;ldquo;conditional branch&amp;rdquo; using GAS has been investigated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ManifestsApp</title>
      <link>https://tanaikech.github.io/2018/07/11/updated-gas-library-manifestsapp/</link>
      <pubDate>Wed, 11 Jul 2018 11:03:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/11/updated-gas-library-manifestsapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ManifestsApp&#34;&gt;ManifestsApp&lt;/a&gt; was updated to v1.0.3.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.3 (July 11, 2018)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By Google&amp;rsquo;s update, &lt;a href=&#34;https://developers.google.com/apps-script/guides/sheets/macros#manifest_structure_for_macros&#34;&gt;&amp;ldquo;sheets&amp;rdquo; was added to manifests&lt;/a&gt; for installing the configuration of Macro. By this, this library was updated.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can see the added methods (getSheets(), setSheets()) at &lt;a href=&#34;#Usage&#34;&gt;Usage&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If you set &amp;ldquo;sheets&amp;rdquo;, please put the value of &amp;ldquo;sheets&amp;rdquo; as the resource like below sample.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;{&amp;quot;macros&amp;quot;: [{&amp;quot;menuName&amp;quot;: &amp;quot;QuickRowSum&amp;quot;, &amp;quot;functionName&amp;quot;: &amp;quot;calculateRowSum&amp;quot;}]}&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Don&amp;rsquo;t put &lt;code&gt;{&amp;quot;sheets&amp;quot;: {&amp;quot;macros&amp;quot;: [{&amp;quot;menuName&amp;quot;: &amp;quot;QuickRowSum&amp;quot;, &amp;quot;functionName&amp;quot;: &amp;quot;calculateRowSum&amp;quot;}]}}&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/ManifestsApp&#34;&gt;https://github.com/tanaikech/ManifestsApp&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Limitation of Images for Inserting to Spreadsheet using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/07/10/limitation-of-images-for-inserting-to-spreadsheet-using-google-apps-script/</link>
      <pubDate>Tue, 10 Jul 2018 08:51:44 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/10/limitation-of-images-for-inserting-to-spreadsheet-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/825f1ebfe7822780316d7c15f89dea11&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Here I would like to introduce about the limitation of images for inserting to Spreadsheet using Google Apps Script (GAS). When you want to insert the images to Spreadsheet using GAS, &lt;code&gt;insertImage()&lt;/code&gt; of class Sheet is usually used for this situation. At this time, an error sometimes occurs. This indicates that there is the limitation for inserting images to Spreadsheet. So I investigated the limitation.&lt;/p&gt;&#xA;&lt;p&gt;As a result, it was found that the limitation depends on the image area (pixels^2) rather than the file size of it. The maximum area of image which can be inserted was 1,048,576 pixels^2.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Taking Advantage of Google Apps Script (Tanaike&#39;s list)</title>
      <link>https://tanaikech.github.io/2018/07/09/taking-advantage-of-google-apps-script-tanaikes-list/</link>
      <pubDate>Mon, 09 Jul 2018 09:30:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/09/taking-advantage-of-google-apps-script-tanaikes-list/</guid>
      <description>&lt;p&gt;Here, CLI tools, libraries, Add-ons, Reports, Benchmarks and Sample Scripts for taking advantage of Google Apps Script which are publishing in my blog, Gists and GitHub are summarized. If these are useful for you, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/taking-advantage-of-google-apps-script&#34;&gt;https://github.com/tanaikech/taking-advantage-of-google-apps-script&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Number of Lines of Google Document</title>
      <link>https://tanaikech.github.io/2018/07/09/retrieving-number-of-lines-of-google-document/</link>
      <pubDate>Mon, 09 Jul 2018 09:02:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/09/retrieving-number-of-lines-of-google-document/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/37def8eeeaf7780bb99d3289ee32385e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are no prepared methods for retrieving the number of lines in the Google Document. So I thought this workaround. If the end of each line can be detected, the number of lines can be retrieved. So I tried to add the end markers of each line using OCR.&lt;/p&gt;&#xA;&lt;p&gt;At Google Documents, when a sentence is over the page width, the sentence automatically has the line break. But the line break has no &lt;code&gt;\r\n&lt;/code&gt; or &lt;code&gt;\n&lt;/code&gt;. When users give the line break by the enter key, the line break has &lt;code&gt;\r\n&lt;/code&gt; or &lt;code&gt;\n&lt;/code&gt;. By this, the text data retrieved from the document has only the line breaks which were given by users. I thought that OCR may be able to be used for this situation. The flow is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Search for Array Processing using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/07/02/benchmark-search-for-array-processing-using-google-apps-script/</link>
      <pubDate>Mon, 02 Jul 2018 08:55:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/07/02/benchmark-search-for-array-processing-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/eda9234822b5dec80549216a43c52652&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;TOP&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;benchmark-search-for-array-processing-using-google-apps-script&#34;&gt;Benchmark: Search for Array Processing using Google Apps Script&lt;/h1&gt;&#xA;&lt;center&gt;&#xD;&#xA;July 2, 2018&#xD;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please be careful! This result can be only used for Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are a limit executing time for Google Apps Script (GAS). That is 6 minutes.&lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; So users always have to pay attention to reducing the process cost of the scripts. Especially, it is very important to know the process cost for the array processing, because the array processing is often used for spreadsheet and Google APIs. Recently, I have reported about the process cost of the loop for the array processing.&lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; Also I have reported &amp;ldquo;Improved Algorithms for Summation of Array Elements&amp;rdquo; as a method for reducing the process cost.&lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; From these reports, it has found that GAS shows much different process cost from other languages. So it is important to investigate the process cost for various scenes. In this report, the process cost of &amp;ldquo;searching strings in an array&amp;rdquo; for the array processing using GAS has been investigated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resumable Conversion from CSV File with Large Size (&gt; 50 MB) to Several Spreadsheets by Splitting File</title>
      <link>https://tanaikech.github.io/2018/06/26/resumable-conversion-from-csv-file-with-large-size-50-mb-to-several-spreadsheets-by-splitting-file/</link>
      <pubDate>Tue, 26 Jun 2018 13:00:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/06/26/resumable-conversion-from-csv-file-with-large-size-50-mb-to-several-spreadsheets-by-splitting-file/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3e44c779f05374d19333444c9a4dd5ba&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a sample script which can achieve the resumable conversion from the large CSV-file to several spreadsheets by splitting the CSV file using Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Is there a situation that you want to convert a CSV file with the large size (&amp;gt; 50 MB) to Spreadsheet? When such large CSV file is converted to Spreadsheet, you will experience the error. The reason is the size and/or also it may be due to the total cells (&amp;gt; 2,000,000 cells) of CSV file. In this case, you will think that when the file is split, each file can be converted to Spreadsheet. But the blob which can be used at GAS is less than 50 MB (52,428,800 bytes). &lt;strong&gt;&lt;a href=&#34;#References&#34;&gt;Ref1&lt;/a&gt;&lt;/strong&gt; So when you have a CSV file with more than 50 MB, it is not possible to split it. In this case, you can split such large file by files.get of Drive API. files.get of Drive API has a function of Partial download. &lt;strong&gt;&lt;a href=&#34;#References&#34;&gt;Ref2&lt;/a&gt;&lt;/strong&gt; Using this, the file can be split. By the way, in my environment, when a CSV file with the size of 100 MB is used for this sample script, when the file is split by 10 MB, about 65 seconds was required to convert a chunk to Spreadsheet. In this case, when the CSV file is completely converted, it is considered that it will be over the limitation time (6 min) for executing GAS. So in this post, I would like to introduce a sample script which can achieve the resumable conversion from the large CSV-file to several spreadsheets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cryptopia API for Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/06/25/cryptopia-api-for-google-apps-script/</link>
      <pubDate>Mon, 25 Jun 2018 08:48:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/06/25/cryptopia-api-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/58f092a544eb1cfbb19bc0252f36e4cb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://developers.google.com/apps-script/releases/#june_19_2018&#34;&gt;By the Google’s update at June 19, 2018&lt;/a&gt;, finally, Utilities.computeDigest(), Utilities.computeHmacSha256Signature() and Utilities.computeHmacSignature() got to be able to use the byte arrays. By this, using only native Google Apps Script, the result can be retrieved without using jsSHA. So &lt;a href=&#34;https://www.cryptopia.co.nz/Home&#34;&gt;Cryptopia API&lt;/a&gt; can be created using only Google Apps Script. If this is useful for you, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-&#34;&gt;Sample script :&lt;/h2&gt;&#xA;&lt;p&gt;When you use this, at first, please input the requiring values. Now the sample values are used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Updated Utilities.computeHmacSignature()</title>
      <link>https://tanaikech.github.io/2018/06/24/about-updated-utilities.computehmacsignature/</link>
      <pubDate>Sun, 24 Jun 2018 17:11:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/06/24/about-updated-utilities.computehmacsignature/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9e9ab42ad225e127c59ae8ae598aacac&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://developers.google.com/apps-script/releases/#june_19_2018&#34;&gt;By the Google&amp;rsquo;s update at June 19, 2018&lt;/a&gt;, finally, &lt;code&gt;Utilities.computeDigest()&lt;/code&gt;, &lt;code&gt;Utilities.computeHmacSha256Signature()&lt;/code&gt; and &lt;code&gt;Utilities.computeHmacSignature()&lt;/code&gt; got to be able to use the byte arrays. By this, using only native Google Apps Script, the result can be retrieved without using &lt;a href=&#34;https://github.com/Caligatio/jsSHA&#34;&gt;jsSHA&lt;/a&gt;. When I used the updated them, the response speed is much faster than that of jsSHA. It is considered that this may be optimized for Google Apps Script. As a sample, it shows 2 samples as follows. The both results are the same.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - FilesApp</title>
      <link>https://tanaikech.github.io/2018/06/15/gas-library-filesapp/</link>
      <pubDate>Fri, 15 Jun 2018 10:32:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/06/15/gas-library-filesapp/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;FilesApp is a GAS library for retrieving file and folder list in Google Drive using Google Apps Script (GAS). Also this can create a tree from all files and folders in Google Drive.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When I create some applications using Google Drive, there are often the case which is required to retrieve the file list and folder list. I had prepared the script each time for each case so far. But recently, I thought that if there is a library for retrieving the file and folder list (as a tree), it will be useful for me and other developers. So I created this. If this was useful for your situation, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving a Key with Maximum Value from Object</title>
      <link>https://tanaikech.github.io/2018/06/15/retrieving-a-key-with-maximum-value-from-object/</link>
      <pubDate>Fri, 15 Jun 2018 08:22:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/06/15/retrieving-a-key-with-maximum-value-from-object/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/fcbc0204e92d8f1cdde74dc5ac820753&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for retrieving a key with the maximum value from an object. This can be also used by Google Apps Script.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// &amp;gt;&amp;gt;&amp;gt; a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Retrieving Reformatted Scripts without Comments in a Project using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/05/28/retrieving-reformatted-scripts-without-comments-in-a-project-using-google-apps-script/</link>
      <pubDate>Mon, 28 May 2018 12:55:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/05/28/retrieving-reformatted-scripts-without-comments-in-a-project-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/61f69fd2ce181865d3430c260c6a5d0b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a sample script for easily retrieving the reformatted scripts without comments in a project using Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When I create GAS script, if the format of script is not correct, the script editor lets me know about it. By this, I can find that the script editor and/or Google Drive checks the format of scripts. I had wished if I could use this function. Recently, I noticed an interesting function. A GAS project is created and when &lt;code&gt;function myFunction() {Logger.log(this)}&lt;/code&gt; is run in the script, I noticed that all scripts in the project are included in &lt;code&gt;this&lt;/code&gt;. Furthermore, when I saw the retrieved script, also I noticed that their scripts are reformatted and all comments are removed. In the case of Apps Script API, when the scripts are retrieved by the API, the retrieved script is the same to the original one. So I think that this will help users retrieve simply the reformatted GAS scripts, and such the reformatted scripts will be able to be used for the various situations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remove Third-party Apps with Account Access using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/05/23/remove-third-party-apps-with-account-access-using-google-apps-script/</link>
      <pubDate>Wed, 23 May 2018 15:51:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/05/23/remove-third-party-apps-with-account-access-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/608e65fee105989df1a7b645c20572c2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a method for removing Third-party Apps with Account Access using a script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20180523a-demo.gif&#34;&#xA;     alt=&#34;Remove Third-party Apps with Account Access using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When users create a script in a project and run the script, if the methods which are required to use scopes are included, users have to authorize to use the scopes using the browser. By authorizing it, users can use the script. The authorized projects can be seen at &lt;a href=&#34;https://myaccount.google.com/permissions&#34;&gt;Third-party Apps with Account Access&lt;/a&gt;. One day, I had a situation that it required to remove the authorization of project, because of the security. Third-party Apps with Account Access can be manually removed as you know. But at that time, I wanted to remove using a script. So I came up with this method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create Folder Tree of Google Drive using Node.js</title>
      <link>https://tanaikech.github.io/2018/05/20/create-folder-tree-of-google-drive-using-node.js/</link>
      <pubDate>Sun, 20 May 2018 13:40:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/05/20/create-folder-tree-of-google-drive-using-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/97b336f04c739ae0181a606eab3dff42&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving a folder tree using Node.js. In this sample, you can set the top of folder for the folder tree. In generally, the folder tree is created by retrieving folders from the top folder in order. For example, when Google Apps Script is used, the script becomes like &lt;a href=&#34;https://gist.github.com/tanaikech/8e9b6fd667efcb483c9c742da9cd4e19&#34;&gt;this&lt;/a&gt;. But when Drive API is used for this situation, if there are a lot of folders in the top folder, a lot of APIs are required to be called. So in this sample, I have tried to create the folder tree by a small number of API calls as possible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resumable Upload for Web Apps using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/05/17/resumable-upload-for-web-apps-using-google-apps-script/</link>
      <pubDate>Thu, 17 May 2018 16:48:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/05/17/resumable-upload-for-web-apps-using-google-apps-script/</guid>
      <description>&lt;h1 id=&#34;news&#34;&gt;News&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/tanaikech/ResumableUploadForGoogleDrive_js&#34;&gt;At October 11, 2019, I published a Javascript library to to run the resumable upload for Google Drive.&lt;/a&gt; When this is used, the large file can be uploaded. You can also use this js library.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/AsynchronousResumableUploadForGoogleDrive&#34;&gt;Resumable Upload of Multiple Files with Asynchronous Process for Google Drive&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a sample script for uploading files with large size (&amp;gt; 50 MB) at Web Apps using Google Apps Script (GAS). The resumable upload method is used for uploading files. This script can be also applied to the script using gapi of javascript.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v102</title>
      <link>https://tanaikech.github.io/2018/05/11/updated-goodls-to-v102/</link>
      <pubDate>Fri, 11 May 2018 20:32:46 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/05/11/updated-goodls-to-v102/</guid>
      <description>&lt;h1 id=&#34;goodls-was-updated-to-v102&#34;&gt;goodls was updated to v.1.0.2&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (May 10, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Files with large size has gotten to be able to be used.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In order to download files with large size (several gigabytes), files are saved by chunks.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieve Difference Between 2 Dimensional Arrays using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/05/07/retrieve-difference-between-2-dimensional-arrays-using-google-apps-script/</link>
      <pubDate>Mon, 07 May 2018 09:41:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/05/07/retrieve-difference-between-2-dimensional-arrays-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2abf57eefc667d6c71310db6aa95a44d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script retrieves the difference elements between 2 dimensional arrays using Google Apps Script. In Google Apps Script, 2 dimensional arrays are often used at Google Docs and Google APIs. And from &lt;a href=&#34;https://gist.github.com/tanaikech/848aeafaac1ec676900bb78e3ce220b6&#34;&gt;my recent report&lt;/a&gt;, it has already found that the process cost of &lt;code&gt;filter()&lt;/code&gt; is the lowest in the other loop methods. So I use the script like this.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c1&amp;#34;&lt;/span&gt;], [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c2&amp;#34;&lt;/span&gt;], [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c3&amp;#34;&lt;/span&gt;], [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a4&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b4&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c4&amp;#34;&lt;/span&gt;], [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a5&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b5&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c5&amp;#34;&lt;/span&gt;]];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c2&amp;#34;&lt;/span&gt;], [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a5&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b5&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c5&amp;#34;&lt;/span&gt;], [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c3&amp;#34;&lt;/span&gt;]];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar2&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;) {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;()}).&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// [[&amp;#34;a1&amp;#34;,&amp;#34;b1&amp;#34;,&amp;#34;c1&amp;#34;],[&amp;#34;a3&amp;#34;,&amp;#34;b3&amp;#34;,&amp;#34;c3&amp;#34;],[&amp;#34;a4&amp;#34;,&amp;#34;b4&amp;#34;,&amp;#34;c4&amp;#34;]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For above script, when it changes from &lt;code&gt;== 0&lt;/code&gt; to &lt;code&gt;&amp;gt; 0&lt;/code&gt;, the duplication elements can be retrieved as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - BatchRequest</title>
      <link>https://tanaikech.github.io/2018/05/02/gas-library-batchrequest/</link>
      <pubDate>Wed, 02 May 2018 15:55:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/05/02/gas-library-batchrequest/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a library for running Batch Requests using Google Apps Script (GAS).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When users use Google&amp;rsquo;s APIs, one quota is used for one API call. When the batch request is used, several APIs can be called by one quota, although there are some limitations in the batch request. For example, in GAS, Drive API can be used be &lt;code&gt;DriveApp&lt;/code&gt;. In this case, the quota is not used for using Drive API. (When &lt;code&gt;Drive&lt;/code&gt; of Advanced Google Services is used, the quota is used.) But this is Drive API v2. If users want to use Drive API v3, it is required to directly request each endpoint of Drive API v3. The batch request is much useful for this situation. However, it is a bit difficult for users to use the batch request. Because the batch request is requested by &lt;code&gt;multipart/mixed&lt;/code&gt;. I thought that the script may become a bit complicated, because of the request of &lt;code&gt;multipart/mixed&lt;/code&gt; using &lt;code&gt;UrlFetchApp&lt;/code&gt;. And although I had been looking for the libraries for the batch request, I couldn&amp;rsquo;t find them. So I created this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CLEAN method for Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/04/27/clean-method-for-google-apps-script/</link>
      <pubDate>Fri, 27 Apr 2018 09:11:40 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/04/27/clean-method-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/585597adda7954ba1cde3e724582bac5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script which works the same action with the &lt;a href=&#34;https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheetfunction-clean-method-excel&#34;&gt;CLEAN method of VBA&lt;/a&gt;. The CLEAN method of VBA removes the characters of &lt;code&gt;0-31, 127, 129, 141, 143, 144, 157&lt;/code&gt;. Although I had looked for such method for Google Apps Script, I couldn&amp;rsquo;t find it. So I created this. If this is useful for you, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cleanForGAS&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;typeof&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;escaped&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;escape&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;trim&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;31&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;re&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RegExp(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;toUpperCase&lt;/span&gt;(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;g&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;escaped&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;escaped&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;re&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%7F&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%81&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%8D&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%8F&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%90&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%9D&amp;#34;&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;re&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RegExp(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;g&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;escaped&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;escaped&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;re&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;unescape&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;escaped&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;trim&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cleanForGAS&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Taking advantage of Web Apps with Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/04/26/taking-advantage-of-web-apps-with-google-apps-script/</link>
      <pubDate>Thu, 26 Apr 2018 08:35:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/04/26/taking-advantage-of-web-apps-with-google-apps-script/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a report to take advantage of Web Apps with Google Apps Script (GAS).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;There is &lt;a href=&#34;https://developers.google.com/apps-script/guides/web&#34;&gt;Web Apps&lt;/a&gt; as one of applications using Google Apps Script (GAS). I sometimes use this Web Apps. But I have only a little the information for the specification of Web Apps. So in order to take more advantage of Web Apps, I investigated and summarized about this. The aim of this report is to become one of the basic information for creating various applications using Web Apps with GAS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieves All Named Ranges in Spreadsheet as a1Notation</title>
      <link>https://tanaikech.github.io/2018/04/25/retrieves-all-named-ranges-in-spreadsheet-as-a1notation/</link>
      <pubDate>Wed, 25 Apr 2018 11:34:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/04/25/retrieves-all-named-ranges-in-spreadsheet-as-a1notation/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/aa744c9a15818c002d90eaea6b4efd03&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for Google Apps Script (GAS). This script retrieves all named ranges in Spreadsheet. The names and range of the retrieved named ranges are output as the keys and the values of JSON object, respectively. The sample output is &lt;code&gt;{&amp;quot;name1&amp;quot;: &amp;quot;Sheet1!A1:B2&amp;quot;, &amp;quot;name2&amp;quot;: &amp;quot;Sheet2!B1:C2&amp;quot;,,,}&lt;/code&gt;. The name of named range has to be only one in the spreadsheet. This was used.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Sheets.Spreadsheets.get()&lt;/code&gt; of Sheets API can retrieve all named ranges. But the retrieved range is the grid range. So in this sample script, the grid range was converted to a1Notation. The main part of this sample script is here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - RunAll</title>
      <link>https://tanaikech.github.io/2018/04/24/gas-library-runall/</link>
      <pubDate>Tue, 24 Apr 2018 08:45:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/04/24/gas-library-runall/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a library for running the concurrent processing using only native Google Apps Script (GAS).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Have you ever thought about the concurrent processing using only native Google Apps Script (GAS)? So far, I had run the concurrent processing using golang, javascript and python. But the script cannot be used by the trigger event, because these are not native GAS. Recently, it was found that &lt;a href=&#34;https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchAll(Object)&#34;&gt;the fetchAll method&lt;/a&gt; added by the Google&amp;rsquo;s update at January 19, 2018 is &lt;a href=&#34;https://gist.github.com/tanaikech/c0f383034045ab63c19604139ecb0728&#34;&gt;worked by the asynchronous processing&lt;/a&gt;. By this, the concurrent processing using the native GAS got to be able to be achieved. This library makes users work the concurrent processing of functions using the fetchAll method and the execution API. This can drastically reduce the process cost in the script. And also this can be used under the trigger event. So it is considered that it will be useful for both the limit executing time of 6 minutes for GAS and the limit total executing time of 1 hour/day for the trigger event.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: fetchAll method in UrlFetch service for Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/04/19/benchmark-fetchall-method-in-urlfetch-service-for-google-apps-script/</link>
      <pubDate>Thu, 19 Apr 2018 14:24:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/04/19/benchmark-fetchall-method-in-urlfetch-service-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c0f383034045ab63c19604139ecb0728&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By Google&amp;rsquo;s update at January 19, 2018, &lt;a href=&#34;https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchAll(Object)&#34;&gt;fetchAll method&lt;/a&gt; was added to the UrlFetch service. When I saw the usage, I couldn&amp;rsquo;t find the detail information about the actual running state. So I investigated about it.&lt;/p&gt;&#xA;&lt;p&gt;As the result, it was found that the fetchAll method is worked by the asynchronous processing. The returned data is reordered by the order of requests. By this, it was also found that if you want to retrieve the data from the several URL, the process cost of &lt;code&gt;UrlFetchApp.fetchAll()&lt;/code&gt; is much lower than that of &lt;code&gt;UrlFetchApp.fetch()&lt;/code&gt; using for loop.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Loop for Array Processing using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/04/16/benchmark-loop-for-array-processing-using-google-apps-script/</link>
      <pubDate>Mon, 16 Apr 2018 08:27:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/04/16/benchmark-loop-for-array-processing-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/848aeafaac1ec676900bb78e3ce220b6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;TOP&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;benchmark-loop-for-array-processing-using-google-apps-script&#34;&gt;Benchmark: Loop for Array Processing using Google Apps Script&lt;/h1&gt;&#xA;&lt;center&gt;&#xD;&#xA;April 16, 2018&#xD;&#xA;    Published.&#xD;&#xA;&lt;p&gt;July 26, 2018&#xA;Updated.&#xA;Result of reduce was added.&lt;/p&gt;&#xA;&lt;p&gt;Kanshi Tanaike&lt;/p&gt;&#xA;&lt;/center&gt;&#xD;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please be careful! This result can be only used for Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are a limit executing time for Google Apps Script (GAS). That is 6 minutes.&lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; So users always have to pay attention to reducing the process cost of the scripts. Especially, it is very important to know the process cost for the array processing, because the array processing is often used for spreadsheet and Google APIs. I have already reported &amp;ldquo;Improved Algorithms for Summation of Array Elements&amp;rdquo; as a method for reducing the process cost.&lt;a href=&#34;#References&#34;&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; In this report, the process cost of &amp;ldquo;loop&amp;rdquo; for the array processing using GAS has been investigated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Event Objects for Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/04/14/benchmark-event-objects-for-google-apps-script/</link>
      <pubDate>Sat, 14 Apr 2018 14:45:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/04/14/benchmark-event-objects-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4892c97df7ac0504ffd715c2dd6cd546&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;There are event objects at Google Apps Script. Typically, users which use Spreadsheet often use &lt;code&gt;onEdit(event)&lt;/code&gt;. Here, I would like to introduce the process costs for the event objects using this &lt;code&gt;onEdit(event)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When &lt;code&gt;onEdit(event)&lt;/code&gt; is used for the spreadsheet, &lt;code&gt;event&lt;/code&gt; of &lt;code&gt;onEdit(event)&lt;/code&gt; has the following structure.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;authMode&amp;#34;&lt;/span&gt;: {},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;range&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;columnStart&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;rowStart&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;rowEnd&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;columnEnd&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: {},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;oldValue&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;old sample text&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;nickname&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sampleName&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample email&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;value&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample text&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this structure, for example, the range of active cell is &lt;code&gt;&amp;quot;range&amp;quot;: {&amp;quot;columnStart&amp;quot;: 1, &amp;quot;rowStart&amp;quot;: 1, &amp;quot;rowEnd&amp;quot;: 1, &amp;quot;columnEnd&amp;quot;: 1 }&lt;/code&gt;. Namely, it&amp;rsquo;s &amp;ldquo;A1&amp;rdquo;. Users can use the range of active cell using this event object. In this report, I have investigated the process cost for retrieving the range of active cell as a sample.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unicode normalization using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/03/16/unicode-normalization-using-google-apps-script/</link>
      <pubDate>Fri, 16 Mar 2018 12:41:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/03/16/unicode-normalization-using-google-apps-script/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a script for converting strings from NFD (Normalization Form Decomposition) to NFC (Normalization Form Composition) using Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Here, I would like to introduce a script for &lt;a href=&#34;https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms&#34;&gt;the unicode normalization&lt;/a&gt; using Google Apps Script. There are the characters with &lt;code&gt;゙&lt;/code&gt; which is the voiced dot and the characters with &lt;code&gt;゚&lt;/code&gt; which is the semi-voiced dot in Japanese language. When these are used for some applications, there are 2 kinds of usages for the character. For example, when for &lt;code&gt;は&lt;/code&gt; (&lt;code&gt;\u306f&lt;/code&gt;) HA with the voiced dot, there are &lt;code&gt;ば&lt;/code&gt; and &lt;code&gt;ば&lt;/code&gt;. These unicodes are &lt;code&gt;\u3070&lt;/code&gt; and &lt;code&gt;\u306f\u3099&lt;/code&gt;. Namely, there are the case which displayed 1 character as 2 characters. In most cases, the characters like &lt;code&gt;\u3070&lt;/code&gt; are used. This called NFC (Normalization Form Composition). But we sometimes meet the characters like &lt;code&gt;\u306f\u3099&lt;/code&gt;. This called NFD (Normalization Form Decomposition). When the document including such characters which are displayed as 2 characters is converted to PDF file, each character is separated like &lt;code&gt;は  ゙&lt;/code&gt;. So users often want to convert the characters constructed by 2 characters to the single characters. Recently, &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize&#34;&gt;String.prototype.normalize&lt;/a&gt; was added at ES2015. But ES2015 cannot be used at Google Apps Script yet. And although I had looked for the scripts like this for GAS, unfortunately, I couldn&amp;rsquo;t find. So I created this script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remove ImportError of Module for Sublime Text</title>
      <link>https://tanaikech.github.io/2018/03/03/remove-importerror-of-module-for-sublime-text/</link>
      <pubDate>Sat, 03 Mar 2018 17:18:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/03/03/remove-importerror-of-module-for-sublime-text/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/78ef9ebb6ce2074ce4f4317b8bfa1a11&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When I launched Sublime Text, I noticed that the error occurred. The error is as follows.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ImportError: No module named &amp;#39;yaml&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I confirmed that this error occurs when the plugin of Material Theme is read. And the error started to occur after Material Theme was updated, recently.&lt;/p&gt;&#xA;&lt;p&gt;In this report, I would like to introduce the method for removing this error. The flow is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Download a file including library for yaml (PyYAML) from &lt;a href=&#34;https://pypi.python.org/pypi/PyYAML&#34;&gt;https://pypi.python.org/pypi/PyYAML&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In my environment, I downloaded &lt;code&gt;PyYAML-3.12.win-amd64-py3.5.exe&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Unzip the downloaded file.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can see a directory of &lt;code&gt;yaml&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Add the directory of &lt;code&gt;yaml&lt;/code&gt; to &lt;code&gt;python3.3.zip&lt;/code&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;python3.3.zip&lt;/code&gt; is in the directory which installed Sublime Text.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;By above flow, the error can be removed. If the error of &lt;code&gt;ImportError&lt;/code&gt; occurs for other modules, you can try to do this method. I think that although my Sublime Text is Sublime Text3 build 3143 x64, this method may be able to be used for Sublime Text2.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated Add-on - RearrangeScripts to v211</title>
      <link>https://tanaikech.github.io/2018/03/02/updated-add-on-rearrangescripts-to-v211/</link>
      <pubDate>Fri, 02 Mar 2018 14:13:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/03/02/updated-add-on-rearrangescripts-to-v211/</guid>
      <description>&lt;h2 id=&#34;rearrangescripts-was-updated-to-v211&#34;&gt;RearrangeScripts was updated to v2.1.1&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.1.1 (Match 2, 2018)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added a notification to turn on the switch for using Google Apps Script API.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This was reported to issuetracker. &lt;a href=&#34;https://issuetracker.google.com/issues/74048155&#34;&gt;https://issuetracker.google.com/issues/74048155&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Acknowledgements: &lt;a href=&#34;https://plus.google.com/111383280394705334200&#34;&gt;Alan Wells&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/rearrangescripts/ndaicidjkbcpajgejcclgfdcncpoekml&#34;&gt;Add-on&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/RearrangeScripts&#34;&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>CLI Tool - gonetatmo</title>
      <link>https://tanaikech.github.io/2018/03/01/cli-tool-gonetatmo/</link>
      <pubDate>Thu, 01 Mar 2018 14:44:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/03/01/cli-tool-gonetatmo/</guid>
      <description>&lt;p&gt;&lt;a name=&#34;Overview&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a CLI tool to retrieve data from a personal weather station of Netatmo.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;I have &lt;a href=&#34;https://www.netatmo.com/en-US/product/weather/weatherstation&#34;&gt;a personal weather station of Netatmo&lt;/a&gt;. I check the data of my local environment using it. In most case, I have used my browser to retrieve the data so far. &lt;a href=&#34;https://github.com/tanaikech/cui4netatmo&#34;&gt;About retrieving data using curl, I have created it before.&lt;/a&gt; Recently, I thought that I wanted to create this as a CLI too. So I created this. This tool can retrieve not only the data of own Netatmo, but also the data of specific area using Netatmo APIs. By this, I got to be able to retrieve easily the data of various places. This tool has the following features.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Append Values by Inserting Rows using Google Sheets API</title>
      <link>https://tanaikech.github.io/2018/02/27/append-values-by-inserting-rows-using-google-sheets-api/</link>
      <pubDate>Tue, 27 Feb 2018 09:51:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/27/append-values-by-inserting-rows-using-google-sheets-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7846ebcafbab8318ff74c9955a99e06b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the case appending values to cell by inserting rows, when &lt;code&gt;sheets.spreadsheets.values.append&lt;/code&gt; is used, the values are appended to the next empty row of the last row. If you want to append values to between cells with values by inserting row, you can achieve it using &lt;code&gt;sheets.spreadsheets.batchUpdate&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When you use this, please use your access token.&lt;/p&gt;&#xA;&lt;h2 id=&#34;endpoint-&#34;&gt;Endpoint :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;POST https://sheets.googleapis.com/v4/spreadsheets/### spreadsheet ID ###:batchUpdate&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;request-body-&#34;&gt;Request body :&lt;/h2&gt;&#xA;&lt;p&gt;In this request body, it appends the data of &amp;ldquo;sample1, sample2, sample3&amp;rdquo; to &amp;ldquo;A1:A3&amp;rdquo; of the sheetId of &amp;ldquo;1234567890&amp;rdquo;. Before appends the data, it supposes that there are some values at &amp;ldquo;A1:A3&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Transposing JSON Object using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/02/25/transposing-json-object-using-google-apps-script/</link>
      <pubDate>Sun, 25 Feb 2018 16:22:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/25/transposing-json-object-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/806fe728f8cf964078ef1354307a433d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for transposing JSON object using Google Apps Script.&lt;/p&gt;&#xA;&lt;h3 id=&#34;input-data-&#34;&gt;Input data :&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a1&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a2&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a3&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key4&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a4&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key5&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a5&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b1&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b2&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b3&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key4&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b4&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key5&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b5&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c1&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c2&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c3&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key4&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c4&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key5&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c5&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d1&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d2&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d3&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key4&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d4&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key5&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d5&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e1&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e2&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e3&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key4&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e4&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key5&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e5&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;output-data-&#34;&gt;Output data :&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e1&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e2&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e3&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key4&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a4&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b4&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c4&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d4&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e4&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key5&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a5&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b5&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c5&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d5&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e5&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;script-&#34;&gt;Script :&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;At first, keys have to be defined by yourself, because the order of json is not decided.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key4&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key5&amp;#34;&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;){&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;){&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;][&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;]]})}).&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;){&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Transposing Slice From (n x m) To (m x n) for golang</title>
      <link>https://tanaikech.github.io/2018/02/22/transposing-slice-from-n-x-m-to-m-x-n-for-golang/</link>
      <pubDate>Thu, 22 Feb 2018 11:25:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/22/transposing-slice-from-n-x-m-to-m-x-n-for-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/5cb41424ff8be0fdf19e78d375b6adb8&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for transposing slice from (n x m) to (m x n) for golang.&lt;/p&gt;&#xA;&lt;h2 id=&#34;script-&#34;&gt;Script :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xD;&#xA;&#xD;&#xA;import &amp;#34;fmt&amp;#34;&#xD;&#xA;&#xD;&#xA;func transpose(slice [][]string) [][]string {&#xD;&#xA;    xl := len(slice[0])&#xD;&#xA;    yl := len(slice)&#xD;&#xA;    result := make([][]string, xl)&#xD;&#xA;    for i := range result {&#xD;&#xA;        result[i] = make([]string, yl)&#xD;&#xA;    }&#xD;&#xA;    for i := 0; i &amp;lt; xl; i++ {&#xD;&#xA;        for j := 0; j &amp;lt; yl; j++ {&#xD;&#xA;            result[i][j] = slice[j][i]&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    return result&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;func main() {&#xD;&#xA;    sample := [][]string{&#xD;&#xA;        []string{&amp;#34;a1&amp;#34;, &amp;#34;a2&amp;#34;, &amp;#34;a3&amp;#34;, &amp;#34;a4&amp;#34;, &amp;#34;a5&amp;#34;},&#xD;&#xA;        []string{&amp;#34;b1&amp;#34;, &amp;#34;b2&amp;#34;, &amp;#34;b3&amp;#34;, &amp;#34;b4&amp;#34;, &amp;#34;b5&amp;#34;},&#xD;&#xA;        []string{&amp;#34;c1&amp;#34;, &amp;#34;c2&amp;#34;, &amp;#34;c3&amp;#34;, &amp;#34;c4&amp;#34;, &amp;#34;c5&amp;#34;},&#xD;&#xA;    }&#xD;&#xA;    ar := transpose(sample)&#xD;&#xA;    fmt.Println(ar)&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;result-&#34;&gt;Result :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[&#xD;&#xA;    [&amp;#34;a1&amp;#34;, &amp;#34;b1&amp;#34;, &amp;#34;c1&amp;#34;],&#xD;&#xA;    [&amp;#34;a2&amp;#34;, &amp;#34;b2&amp;#34;, &amp;#34;c2&amp;#34;],&#xD;&#xA;    [&amp;#34;a3&amp;#34;, &amp;#34;b3&amp;#34;, &amp;#34;c3&amp;#34;],&#xD;&#xA;    [&amp;#34;a4&amp;#34;, &amp;#34;b4&amp;#34;, &amp;#34;c4&amp;#34;],&#xD;&#xA;    [&amp;#34;a5&amp;#34;, &amp;#34;b5&amp;#34;, &amp;#34;c5&amp;#34;]&#xD;&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-go-playground&#34;&gt;The Go Playground&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://play.golang.org/p/XoZy7m65rEG&#34;&gt;https://play.golang.org/p/XoZy7m65rEG&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Open Site with New Window using Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/02/20/open-site-with-new-window-using-google-apps-script/</link>
      <pubDate>Tue, 20 Feb 2018 10:04:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/20/open-site-with-new-window-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/9115c70eb83558d3af2eea656e4d9c67&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for opening a site with new window using Google Apps Script. It is possible to open the site inside the opened dialog box using iframe. But in my situation, I had to open the site as new window. So I created this. As a sample application, it can think of like this. When the special keyword was inputted, open sites and files in Google Drive as a help window. In this case, the trigger installed &lt;code&gt;onEdit()&lt;/code&gt; is required to be used. I think that there are some other applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Add-on - ShapeApp was featured</title>
      <link>https://tanaikech.github.io/2018/02/15/add-on-shapeapp-was-featured/</link>
      <pubDate>Thu, 15 Feb 2018 12:59:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/15/add-on-shapeapp-was-featured/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://sites.google.com/site/scriptsexamples/home/announcements/new-add-ons-january-2018&#34;&gt;At February 15th, 2018, ShapeApp was featured as one of &amp;ldquo;4 useful add-ons launched last month&amp;rdquo;.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Files From Local To Google Drive by Python without Quickstart</title>
      <link>https://tanaikech.github.io/2018/02/12/uploading-files-from-local-to-google-drive-by-python-without-quickstart/</link>
      <pubDate>Mon, 12 Feb 2018 11:39:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/12/uploading-files-from-local-to-google-drive-by-python-without-quickstart/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8cdfd23807372657dc63d81e25e35153&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for uploading files from local PC to Google Drive using Python. In this sample, Quickstart is not used. So when you use this script, please retrieve access token.&lt;/p&gt;&#xA;&lt;h2 id=&#34;curl-sample-&#34;&gt;Curl sample :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X POST &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization: Bearer ### access token ###&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -F &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;metadata={name : &amp;#39;sample.png&amp;#39;, parents: [&amp;#39;### folder ID ###&amp;#39;]};type=application/json;charset=UTF-8&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -F &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file=@sample.png;type=image/png&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;]&lt;/p&gt;&#xA;&lt;h2 id=&#34;python-sample-&#34;&gt;Python sample :&lt;/h2&gt;&#xA;&lt;p&gt;When above curl sample is converted to Python, it becomes as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v141</title>
      <link>https://tanaikech.github.io/2018/02/09/updated-ggsrun-to-v141/</link>
      <pubDate>Fri, 09 Feb 2018 12:37:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/09/updated-ggsrun-to-v141/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v141&#34;&gt;ggsrun was updated to v.1.4.1&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.4.1 (February 9, 2018)&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#ResumableUpload&#34;&gt;For uploading, the resumable-upload method was added.&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The resumable-upload method is automatically used by the size of file.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;ldquo;multipart/form-data&amp;rdquo; can upload files with the size less than 5 MB.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;resumable-upload&amp;rdquo; can upload files with the size more than 5 MB.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The chunk for resumable-upload is 100 MB as the default.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Users can also give this chunk size using an option.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$ ggsrun u -f filename -chunk 10&lt;/code&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This means that a file with filename is uploaded by each chunk of 10 MB.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can read &amp;ldquo;How to install&amp;rdquo; at &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/README.md#How_to_Install&#34;&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Copying Values from JSON to Struct using reflect Package</title>
      <link>https://tanaikech.github.io/2018/02/06/copying-values-from-json-to-struct-using-reflect-package/</link>
      <pubDate>Tue, 06 Feb 2018 10:22:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/06/copying-values-from-json-to-struct-using-reflect-package/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ada603db41ef0724a2e3d74cc392d9ed&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for copying values from JSON to a struct using &lt;a href=&#34;https://golang.org/pkg/reflect/&#34;&gt;reflect&lt;/a&gt; package.&lt;/p&gt;&#xA;&lt;h2 id=&#34;script-&#34;&gt;Script :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xD;&#xA;&#xD;&#xA;import (&#xD;&#xA;&#x9;&amp;#34;encoding/json&amp;#34;&#xD;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xD;&#xA;&#x9;&amp;#34;reflect&amp;#34;&#xD;&#xA;)&#xD;&#xA;&#xD;&#xA;type obj struct {&#xD;&#xA;&#x9;Key1 string `json:&amp;#34;k1&amp;#34;`&#xD;&#xA;&#x9;Key2 string `json:&amp;#34;k2&amp;#34;`&#xD;&#xA;&#x9;Key3 int64  `json:&amp;#34;k3&amp;#34;`&#xD;&#xA;&#x9;Key4 int    `json:&amp;#34;k4&amp;#34;`&#xD;&#xA;&#x9;Key5 bool   `json:&amp;#34;k5&amp;#34;`&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;func main() {&#xD;&#xA;&#x9;data := `{&amp;#34;k1&amp;#34;: &amp;#34;v1&amp;#34;, &amp;#34;k2&amp;#34;: &amp;#34;v2&amp;#34;, &amp;#34;k3&amp;#34;: 1234567890, &amp;#34;k4&amp;#34;: 456, &amp;#34;k5&amp;#34;: true}`&#xD;&#xA;&#x9;d := map[string]interface{}{}&#xD;&#xA;&#x9;json.Unmarshal([]byte(data), &amp;amp;d)&#xD;&#xA;&#x9;obj := &amp;amp;obj{}&#xD;&#xA;&#x9;s := reflect.ValueOf(obj).Elem()&#xD;&#xA;&#x9;typeOfT := s.Type()&#xD;&#xA;&#x9;for i := 0; i &amp;lt; s.NumField(); i++ {&#xD;&#xA;&#x9;&#x9;for j, f := range d {&#xD;&#xA;&#x9;&#x9;&#x9;if typeOfT.Field(i).Tag.Get(&amp;#34;json&amp;#34;) == j {&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;fl := s.FieldByName(typeOfT.Field(i).Name)&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;switch fl.Kind() {&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;case reflect.Bool:&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;fl.SetBool(f.(bool))&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;case reflect.Int, reflect.Int64:&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;c, _ := f.(float64)&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;fl.SetInt(int64(c))&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;case reflect.String:&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;fl.SetString(f.(string))&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;}&#xD;&#xA;&#x9;&#x9;&#x9;}&#xD;&#xA;&#x9;&#x9;}&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;fmt.Printf(&amp;#34;%+v\n&amp;#34;, obj) // &amp;amp;{Key1:v1 Key2:v2 Key3:1234567890 Key4:456 Key5:true}&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;result-&#34;&gt;Result :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;amp;{Key1:v1 Key2:v2 Key3:1234567890 Key4:456 Key5:true}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-go-playground&#34;&gt;The Go Playground&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://play.golang.org/p/Rz-GNbFyDfh&#34;&gt;https://play.golang.org/p/Rz-GNbFyDfh&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parsing JSON object (keys are number and changing every time)</title>
      <link>https://tanaikech.github.io/2018/02/05/parsing-json-object-keys-are-number-and-changing-every-time/</link>
      <pubDate>Mon, 05 Feb 2018 13:25:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/05/parsing-json-object-keys-are-number-and-changing-every-time/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/62cb5d89bdf2cc596e97ee604431e35f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for parsing JSON object. In the object, the keys are number and changing every time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;object&#34;&gt;Object:&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;: [{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3a&amp;#34;&lt;/span&gt;}, {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3b&amp;#34;&lt;/span&gt;}]},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;: [{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3c&amp;#34;&lt;/span&gt;}, {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3d&amp;#34;&lt;/span&gt;}]}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;script&#34;&gt;Script:&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;encoding/json&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;strconv&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Key1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;key1&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Key2&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{} &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;key2&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`{&amp;#34;key1&amp;#34;: {&amp;#34;key2&amp;#34;: [{&amp;#34;0&amp;#34;: [{&amp;#34;key3&amp;#34;: &amp;#34;value3a&amp;#34;}, {&amp;#34;key3&amp;#34;: &amp;#34;value3b&amp;#34;}]},{&amp;#34;1&amp;#34;: [{&amp;#34;key3&amp;#34;: &amp;#34;value3c&amp;#34;}, {&amp;#34;key3&amp;#34;: &amp;#34;value3d&amp;#34;}]}]}}`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;k1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;json&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Unmarshal&lt;/span&gt;([]byte(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;), &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Key1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Key2&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.(&lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{})[&lt;span style=&#34;color:#a6e22e&#34;&gt;strconv&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Itoa&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;)].([]&lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{}); &lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%+v\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.(&lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{})[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;result&#34;&gt;Result:&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;value3a&#xD;&#xA;value3b&#xD;&#xA;value3c&#xD;&#xA;value3d&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-go-playground&#34;&gt;The Go Playground&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://play.golang.org/p/xm2KvgOIkKH&#34;&gt;https://play.golang.org/p/xm2KvgOIkKH&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated Add-on - RearrangeScripts to v210</title>
      <link>https://tanaikech.github.io/2018/02/03/updated-add-on-rearrangescripts-to-v210/</link>
      <pubDate>Sat, 03 Feb 2018 16:58:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/03/updated-add-on-rearrangescripts-to-v210/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v2.1.0 (February 3, 2018)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;From this version, it got to be able to use the projects of both standalone script type and container-bound script type.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/rearrangescripts/ndaicidjkbcpajgejcclgfdcncpoekml&#34;&gt;Add-on&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/RearrangeScripts&#34;&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Adding a Label to a Message using Message ID for Gmail</title>
      <link>https://tanaikech.github.io/2018/02/03/adding-a-label-to-a-message-using-message-id-for-gmail/</link>
      <pubDate>Sat, 03 Feb 2018 10:03:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/03/adding-a-label-to-a-message-using-message-id-for-gmail/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/69c7daf910fdad0d6a296ea19f612089&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are sample scripts for adding a label to a message using message ID for Gmail.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-1&#34;&gt;Sample 1&lt;/h2&gt;&#xA;&lt;p&gt;This sample adds a label to a thread using message ID. In this case, all messages in the thread have the label. Even if it adds a label to a message in the thread using &lt;code&gt;addLabel()&lt;/code&gt;, all messages in the thread have the label, becauce &lt;code&gt;addLabel&lt;/code&gt; can only be used for the thread.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Retrieve Replied Emails for Gmail</title>
      <link>https://tanaikech.github.io/2018/02/01/how-to-retrieve-replied-emails-for-gmail/</link>
      <pubDate>Thu, 01 Feb 2018 10:46:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/02/01/how-to-retrieve-replied-emails-for-gmail/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a047e5f67f30b93482986039daa16dbc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;description-&#34;&gt;Description :&lt;/h2&gt;&#xA;&lt;p&gt;This sample script is for retrieving emails which replied for received mails. Because there are no samples which confirm whether the owner (me) replied to the received mails, I created this. The point is as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When there are more than 2 messages in a thread, there might be a possibility to have replied.&lt;/li&gt;&#xA;&lt;li&gt;For more than 2 messages in a thread&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The email address of &amp;ldquo;from&amp;rdquo; for the 1st message is the sender&amp;rsquo;s address.&lt;/li&gt;&#xA;&lt;li&gt;When the email address of &amp;ldquo;to&amp;rdquo; of after 2nd messages is the same to that of &amp;ldquo;from&amp;rdquo; of 1st one, it is indicates that the thread was replied by owner.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This sample script is made of Google Apps Script (GAS). But also this can be applied to other languages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ManifestsApp</title>
      <link>https://tanaikech.github.io/2018/01/29/updated-gas-library-manifestsapp/</link>
      <pubDate>Mon, 29 Jan 2018 13:05:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/29/updated-gas-library-manifestsapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ManifestsApp&#34;&gt;ManifestsApp&lt;/a&gt; was updated to v1.0.2.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.2 (January 29, 2018)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ProjectApp2&#34;&gt;ProjectApp2&lt;/a&gt; is published, and got to be able to use both standalone script type and container-bound script type.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By this, this library also got to be able to be used for the both projects.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;For this update, please enable Apps Script API.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Please check &lt;a href=&#34;https://github.com/tanaikech/ManifestsApp#HowToInstall&#34;&gt;&amp;ldquo;How to install&amp;rdquo;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/ManifestsApp&#34;&gt;https://github.com/tanaikech/ManifestsApp&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - ProjectApp2</title>
      <link>https://tanaikech.github.io/2018/01/29/gas-library-projectapp2/</link>
      <pubDate>Mon, 29 Jan 2018 13:01:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/29/gas-library-projectapp2/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;This is a GAS project library for Google Apps Script (GAS). This library can be used for the projects of both standalone script type and container-bound script type.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;Description&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;There are Class SpreadsheetApp and Class DocumentApp for operating spreadsheet and document, respectively. But there is no Class for operating GAS project. If there is such Class ProjectApp, GAS project can be directly operated by GAS script. I thought that this will lead to new applications, and created &lt;a href=&#34;https://github.com/tanaikech/ProjectApp&#34;&gt;ProjectApp&lt;/a&gt;. On the other hand, as a CLI tool for operating GAS project, there has already been &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;ggsrun&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>google.script.run and jQuery.Deferred</title>
      <link>https://tanaikech.github.io/2018/01/26/google.script.run-and-jquery.deferred/</link>
      <pubDate>Fri, 26 Jan 2018 09:55:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/26/google.script.run-and-jquery.deferred/</guid>
      <description>&lt;p&gt;&lt;code&gt;google.script.run&lt;/code&gt; doesn&amp;rsquo;t return values. So I tried this using jQuery.Deferred.&lt;/p&gt;&#xA;&lt;h3 id=&#34;gas--codegs&#34;&gt;GAS : Code.gs&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doGet&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;HtmlService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createHtmlOutputFromFile&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;index&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .&lt;span style=&#34;color:#a6e22e&#34;&gt;setSandboxMode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;HtmlService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SandboxMode&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IFRAME&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getValues&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hoge&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;html--indexhtml&#34;&gt;HTML : index.html&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.js&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/script&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ok&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/div&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(() =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#button&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;click&lt;/span&gt;(() =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fuga&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;googleScriptRun&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#result&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;googleScriptRun&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Deferred&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;google&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;withSuccessHandler&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;resolve&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;)}).&lt;span style=&#34;color:#a6e22e&#34;&gt;getValues&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;promise&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/script&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/body&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;result-&#34;&gt;Result :&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;fugahoge&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Above sample can be also written as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v140</title>
      <link>https://tanaikech.github.io/2018/01/25/updated-ggsrun-to-v140/</link>
      <pubDate>Thu, 25 Jan 2018 08:16:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/25/updated-ggsrun-to-v140/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v140&#34;&gt;ggsrun was updated to v.1.4.0&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.4.0 (January 25, 2018)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://developers.google.com/apps-script/api/reference/rest/&#34;&gt;Google Apps Script API&lt;/a&gt; was finally released. From this version, ggsrun uses this API. So ggsrun got to be able to use not only projects of standalone script type, but also projects of container-bound script type. I hope this updated ggsrun will be useful for you.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/README.md#from134to140&#34;&gt;To users which are using ggsrun with v1.3.4 and/or less&lt;/a&gt;.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;For retrieving, downloading, creating and updating projects, &lt;a href=&#34;https://developers.google.com/apps-script/api/reference/rest/&#34;&gt;Apps Script API&lt;/a&gt; is used.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;About retrieving information of projects, the information from Drive API is more than that from Apps Script API. So I used Drive API in this situation.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/README.md#BasicSettingFlow&#34;&gt;Please read how to enable APIs.&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;ggsrun got to be able to use both standalone scripts and container-bound scripts by Apps Script API.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#UploadFiles&#34;&gt;Create projects&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#Update_Project&#34;&gt;Update projects&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;There are some issues for creating projects.&#xA;&lt;ol&gt;&#xA;&lt;li&gt;After Manifests was added to GAS, the time zone can be set by it. But when a new project is created by API, I noticed that the time zone is different from own local time zone. When a new project is manually created by browser, the time zone is the same to own local time zone. I think that this may be a bug. So I added an option for setting time zone when a new project is created. And also I reported about this to &lt;a href=&#34;https://issuetracker.google.com/issues/72019223&#34;&gt;Google Issue Tracker&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If you want to create a bound script in Slide, an error occurs. When a bound script can be created to Spreadsheet, Document and Form using Apps Script API. Furthermore, when the bound script in Slide is updated, it works fine. So I think that this may be also a bug. I reported about this to &lt;a href=&#34;https://issuetracker.google.com/issues/72238499&#34;&gt;Google Issue Tracker&lt;/a&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;About this, when you create a bound script in Slides, if ggsrun returns no errors, it means that this issue was solved.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#rearrangescripts&#34;&gt;Both standalone scripts and container-bound scripts can be rearranged.&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The file of &lt;code&gt;appsscript&lt;/code&gt; for Manifests is always displayed to the top of files on the script editor, while the array of files can be changed. I think that this is the specification.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;For the option &lt;code&gt;exe1&lt;/code&gt; for executing GAS, it can use for both standalone scripts and container-bound scripts.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#DownloadFiles&#34;&gt;Delete files using file ID on Google Drive.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#Update_Project&#34;&gt;Delete files in the project.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#UploadFiles&#34;&gt;ggsrun can create new container-bound script in the new Google Docs.&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For example, ggsrun creates a new Spreadsheet and uploads the script files to the Spreadsheet as a container-bound script.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#RevisionFile&#34;&gt;Retrieve and create versions of projects.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#QA7&#34;&gt;Unified the order of directories for searching &lt;code&gt;client_secret.json&lt;/code&gt; and &lt;code&gt;ggsrun.cfg&lt;/code&gt;.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Some modifications.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can read &amp;ldquo;How to install&amp;rdquo; at &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/README.md#How_to_Install&#34;&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Copying and Overwriting GAS Project</title>
      <link>https://tanaikech.github.io/2018/01/20/copying-and-overwriting-gas-project/</link>
      <pubDate>Sat, 20 Jan 2018 11:18:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/20/copying-and-overwriting-gas-project/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3e7608bd8ba87dd6019aedbd09224bd3&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;pattern-1&#34;&gt;Pattern 1&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample script for copying GAS project to a container-bound script of Google Docs (Spreadsheet, Document and Form (and Slides)). The project is created as a new project.&lt;/p&gt;&#xA;&lt;p&gt;In order to use this sample, please do the following installation flow.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;If you use this sample script, at first, please test using a new project and new Google Docs. By this, please understand the work of this script.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Batching Requests for Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/01/19/batching-requests-for-google-apps-script/</link>
      <pubDate>Fri, 19 Jan 2018 09:38:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/19/batching-requests-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f167b9280a8e710804e4061571b53fb9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is &lt;a href=&#34;https://developers.google.com/drive/v3/web/batch&#34;&gt;the bathing requests&lt;/a&gt; in the Google APIs. The bathing requests can use the several API calls as a single HTTP request. By using this, for example, users can modify filenames of a lot of files on Google Drive. But there are limitations for the number of API calls which can process in one batch request. For example, Drive API can be used the maximum of 100 calls in one batch request.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zaif API for Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/01/15/zaif-api-for-google-apps-script/</link>
      <pubDate>Mon, 15 Jan 2018 09:47:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/15/zaif-api-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/77481c2621dc7429449194c0f1dbd58c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for using &lt;a href=&#34;http://techbureau-api-document.readthedocs.io/ja/latest/index.html&#34;&gt;Zaif API&lt;/a&gt; by Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The following go script is a sample at &lt;a href=&#34;http://techbureau-api-document.readthedocs.io/ja/latest/trade/3_how_to_implement/2_go.html&#34;&gt;Zaif API&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xD;&#xA;&#xD;&#xA;import (&#xD;&#xA;    &amp;#34;fmt&amp;#34;&#xD;&#xA;    &amp;#34;time&amp;#34;&#xD;&#xA;    &amp;#34;strconv&amp;#34;&#xD;&#xA;    &amp;#34;crypto/hmac&amp;#34;&#xD;&#xA;    &amp;#34;crypto/sha512&amp;#34;&#xD;&#xA;    &amp;#34;io/ioutil&amp;#34;&#xD;&#xA;    &amp;#34;net/http&amp;#34;&#xD;&#xA;    &amp;#34;encoding/hex&amp;#34;&#xD;&#xA;    &amp;#34;net/url&amp;#34;&#xD;&#xA;    &amp;#34;strings&amp;#34;&#xD;&#xA;)&#xD;&#xA;&#xD;&#xA;var key = &amp;#34;&amp;lt;your_key&amp;gt;&amp;#34;&#xD;&#xA;var secret = &amp;#34;&amp;lt;your_secret&amp;gt;&amp;#34;&#xD;&#xA;&#xD;&#xA;func main() {&#xD;&#xA;&#xD;&#xA;    uri := &amp;#34;https://api.zaif.jp/tapi&amp;#34;&#xD;&#xA;    values := url.Values{}&#xD;&#xA;    values.Add(&amp;#34;method&amp;#34;, &amp;#34;get_info&amp;#34;)&#xD;&#xA;    values.Add(&amp;#34;nonce&amp;#34;, strconv.FormatInt(time.Now().Unix(), 10))&#xD;&#xA;&#xD;&#xA;    encodedParams := values.Encode()&#xD;&#xA;    req, _ := http.NewRequest(&amp;#34;POST&amp;#34;, uri, strings.NewReader(encodedParams))&#xD;&#xA;&#xD;&#xA;    hash := hmac.New(sha512.New, []byte(secret))&#xD;&#xA;    hash.Write([]byte(encodedParams))&#xD;&#xA;    signature := hex.EncodeToString(hash.Sum(nil))&#xD;&#xA;&#xD;&#xA;    req.Header.Add(&amp;#34;Key&amp;#34;, key)&#xD;&#xA;    req.Header.Add(&amp;#34;Sign&amp;#34;, signature)&#xD;&#xA;    client := new(http.Client)&#xD;&#xA;    resp, _ := client.Do(req)&#xD;&#xA;    defer resp.Body.Close()&#xD;&#xA;&#xD;&#xA;    byteArray, _ := ioutil.ReadAll(resp.Body)&#xD;&#xA;    fmt.Println(string(byteArray))&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When this is converted to GAS, the script is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bittrex API for Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/01/12/bittrex-api-for-google-apps-script/</link>
      <pubDate>Fri, 12 Jan 2018 10:23:27 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/12/bittrex-api-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/07fb768cf6d8256b3a72716a72e99f91&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for using &lt;a href=&#34;https://bittrex.com/home/api&#34;&gt;Bittrex API&lt;/a&gt; by Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;The following PHP script is a sample at &lt;a href=&#34;https://bittrex.com/home/api&#34;&gt;bittrex.com&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$apikey&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;xxx&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$apisecret&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;xxx&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$nonce&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$uri&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://bittrex.com/api/v1.1/market/getopenorders?apikey=&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;$apikey&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;amp;nonce=&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;$nonce;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$sign&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;hash_hmac&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sha512&amp;#39;&lt;/span&gt;,$uri,$apisecret);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ch &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;curl_init&lt;/span&gt;($uri);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl_setopt&lt;/span&gt;($ch, &lt;span style=&#34;color:#a6e22e&#34;&gt;CURLOPT_HTTPHEADER&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;array&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;apisign:&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;$sign));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$execResult &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;curl_exec&lt;/span&gt;($ch);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$obj &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;json_decode&lt;/span&gt;($execResult);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When this is converted to GAS, the script is as follows.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apikey&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#####&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please input your key.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apisecret&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#####&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please input your secret.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nonce&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Number(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Date().&lt;span style=&#34;color:#a6e22e&#34;&gt;getTime&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;toFixed&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://bittrex.com/api/v1.1/market/getopenorders?apikey=&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apikey&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;amp;nonce=&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nonce&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;computeHmacSignature&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MacAlgorithm&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;HMAC_SHA_512&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;apisecret&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;256&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;)).&lt;span style=&#34;color:#a6e22e&#34;&gt;slice&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;);}).&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;get&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&lt;span style=&#34;color:#a6e22e&#34;&gt;Apisign&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sign&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Binance API for Google Apps Script</title>
      <link>https://tanaikech.github.io/2018/01/12/binance-api-for-google-apps-script/</link>
      <pubDate>Fri, 12 Jan 2018 07:18:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/12/binance-api-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/175067567819577fd8eba9b82eabd1a6&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for using &lt;a href=&#34;https://www.binance.com/restapipub.html#user-content-signed-endpoint-security&#34;&gt;Binance API&lt;/a&gt; by Google Apps Script. This script encryptes &amp;ldquo;signature&amp;rdquo; like samples. In this script, &amp;ldquo;Example 1: As a query string&amp;rdquo; is used, and it retrieves &amp;ldquo;All orders (SIGNED)&amp;rdquo; by &amp;ldquo;GET&amp;rdquo;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#####&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please input your key.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;secret&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#####&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please input your secret.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;api&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/api/v3/allOrders&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please input API Endpoint you want.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;timestamp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Number(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Date().&lt;span style=&#34;color:#a6e22e&#34;&gt;getTime&lt;/span&gt;()).&lt;span style=&#34;color:#a6e22e&#34;&gt;toFixed&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;symbol=LTCBTC&amp;amp;timestamp=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;timestamp&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Please input query parameters for the inputterd API.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;baseUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://api.binance.com&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;computeHmacSha256Signature&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;secret&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;256&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }).&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;?&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;amp;signature=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;signature&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;method&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;get&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;headers&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;X-MBX-APIKEY&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;muteHttpExceptions&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;baseUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;api&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Updated goodls to v101</title>
      <link>https://tanaikech.github.io/2018/01/11/updated-goodls-to-v101/</link>
      <pubDate>Thu, 11 Jan 2018 12:13:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/11/updated-goodls-to-v101/</guid>
      <description>&lt;h1 id=&#34;goodls-was-updated-to-v101&#34;&gt;goodls was updated to v.1.0.1&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.0.1 (January 11, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In order to download several files, a datafile including URLs using Standard Input and Pipe have gotten to be able to be inputted.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goodls&#34;&gt;https://github.com/tanaikech/goodls&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CLI Tool - goodls</title>
      <link>https://tanaikech.github.io/2018/01/10/cli-tool-goodls/</link>
      <pubDate>Wed, 10 Jan 2018 14:37:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/10/cli-tool-goodls/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a CLI tool to download shared files from Google Drive.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;We have already known that the shared files on Google Drive can be downloaded without the authorization. But when the size of file becomes large (about 40MB), it requires a little ingenuity to download the file. It requires to access 2 times to Google Drive. At 1st access, it retrieves a cookie and a code for downloading. At 2nd access, the file is downloaded using the cookie and code. I created this process as a CLI tool. This tool has the following features.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Send mails from Gmail using Nodemailer</title>
      <link>https://tanaikech.github.io/2018/01/08/send-mails-from-gmail-using-nodemailer/</link>
      <pubDate>Mon, 08 Jan 2018 10:35:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/08/send-mails-from-gmail-using-nodemailer/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d225c7adab818a6dc1dfd7783f8c8e4d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for sending e-mails from gmail using Nodemailer. In order to use this, please retrieve the folloing parameters before run this script.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;gmail address&lt;/li&gt;&#xA;&lt;li&gt;client ID&lt;/li&gt;&#xA;&lt;li&gt;client Secret&lt;/li&gt;&#xA;&lt;li&gt;Refresh token&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Please include &lt;code&gt;https://mail.google.com/&lt;/code&gt; in the scope.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Enable gmail API at API console.&lt;/li&gt;&#xA;&lt;li&gt;Install Nodemailer&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nodemailer&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;nodemailer&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;oauth2&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;### your gmail address ###&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;clientId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;### client ID ###&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;clientSecret&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;### client secret ###&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;refreshToken&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;### refresh token ###&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mailOptions&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#####&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#####&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;subject&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sample subject&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sample text&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;b&amp;gt;sample html&amp;lt;/b&amp;gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;transporter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nodemailer&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createTransport&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;gmail&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;transporter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sendMail&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;mailOptions&lt;/span&gt;, (&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;) =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;reference-&#34;&gt;Reference :&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.npmjs.com/package/nodemailer&#34;&gt;Nodemailer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://nodemailer.com/smtp/oauth2/&#34;&gt;Nodemailer OAuth2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Add-on - ShapeApp</title>
      <link>https://tanaikech.github.io/2018/01/06/add-on-shapeapp/</link>
      <pubDate>Sat, 06 Jan 2018 16:24:44 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/06/add-on-shapeapp/</guid>
      <description>&lt;h2 id=&#34;shapeapp-for-google-slides-was-published-as-an-add-on-application&#34;&gt;ShapeApp for Google Slides was published as an add-on application&lt;/h2&gt;&#xA;&lt;p&gt;When you use Google Slides, have you ever thought about creating and updating shapes on Slides by inputting parameters, and arranging selected shapes? I have thought about them. Recently, since Class SlidesApp was added to GAS, it came to be able to easily to create various applications for Slides. So I created this. This application is add-on application which was made of GAS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Which of Drive API v2 or v3 is used for DriveApp.searchFiles()</title>
      <link>https://tanaikech.github.io/2018/01/05/which-of-drive-api-v2-or-v3-is-used-for-driveapp.searchfiles/</link>
      <pubDate>Fri, 05 Jan 2018 16:48:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/05/which-of-drive-api-v2-or-v3-is-used-for-driveapp.searchfiles/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/242f644026837dd071f0ce95b2fd107a&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;experiment&#34;&gt;Experiment&lt;/h2&gt;&#xA;&lt;p&gt;It has investigated the differences between the documents of &amp;ldquo;Search for Files&amp;rdquo; for v2 and v3. The following table shows the comparison of v2 and v3 for &amp;ldquo;Valid fields for files.list&amp;rdquo;. The column of &lt;code&gt;DriveApp.searchFiles()&lt;/code&gt; means whether the query can be used for &lt;code&gt;DriveApp.searchFiles()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;v2&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;v3&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Difference&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;DriveApp.searchFiles()&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;title&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;name&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;different&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;v2: succeed, v3: fail&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;fullText&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;fullText&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;mimeType&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;mimeType&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;modifiedDate&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;modifiedTime&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;lastViewedByMeDate&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;viewedByMeTime&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;different&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;v2: succeed, v3: fail&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;trashed&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;trashed&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;starred&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;starred&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;parents&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;parents&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;owners&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;owners&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;writers&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;writers&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;readers&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;readers&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;sharedWithMe&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;sharedWithMe&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;properties&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;properties&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;properties with visibility=&amp;lsquo;PRIVATE&amp;rsquo;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;appProperties&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;different&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;v2: succeed, v3: fail&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;visibility&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;visibility&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;same&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;result&#34;&gt;Result&lt;/h2&gt;&#xA;&lt;p&gt;As the result, it is considered that &lt;code&gt;DriveApp.searchFiles()&lt;/code&gt; is used as Drive API v2 yet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v134</title>
      <link>https://tanaikech.github.io/2018/01/02/updated-ggsrun-to-v134/</link>
      <pubDate>Tue, 02 Jan 2018 14:32:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2018/01/02/updated-ggsrun-to-v134/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v134&#34;&gt;ggsrun was updated to v.1.3.4&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.3.4 (January 2, 2018)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Added new option for downloading &amp;lsquo;bound-scripts&amp;rsquo; of Google Sheets, Docs, or Forms file.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the bound-scripts are downloaded, the project name cannot be retrieved because Drive API cannot be used for the bound-scripts. So when the bound-scripts are downloaded, the project ID had been used previously. Such filename is not easily to be seen. By this additional option, users can give the filename when it downloads the bound-scripts.&lt;/li&gt;&#xA;&lt;li&gt;The usage is &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#DownloadBoundScript&#34;&gt;here&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Removed a bug.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When a project is downloaded, script ID in the project is added to the top of each downloaded script as a comment. There was a problem at the character using for the comment out. This was modified.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;You can check this and download ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>IssueTracker: Bug for scopes of Slides</title>
      <link>https://tanaikech.github.io/2017/12/31/issuetracker-bug-for-scopes-of-slides/</link>
      <pubDate>Sun, 31 Dec 2017 17:11:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/31/issuetracker-bug-for-scopes-of-slides/</guid>
      <description>&lt;p&gt;I have reported because I found a bug for scopes of Slides. The detail is the following URL.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://issuetracker.google.com/issues/71448583&#34;&gt;https://issuetracker.google.com/issues/71448583&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bitfinex API for Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/12/31/bitfinex-api-for-google-apps-script/</link>
      <pubDate>Sun, 31 Dec 2017 10:47:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/31/bitfinex-api-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1104d039341f198f95eee66af57c0abf&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is converted &lt;a href=&#34;https://docs.bitfinex.com/v2/docs/rest-auth&#34;&gt;this sample script (javascript)&lt;/a&gt; to Google Apps Script. The point for converting is &lt;code&gt;signature&lt;/code&gt; as shown in the following sample script.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At Bitfinex API, after &lt;code&gt;&amp;quot;/api/&amp;quot; + apiPath + nonce + rawBody&lt;/code&gt; is encrypted using HMAC SHA-384, the data of byte array is converted to HEX.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In Google Apps Script, there is no the method for this.&lt;/li&gt;&#xA;&lt;li&gt;The data which was encrypted by &lt;code&gt;Utilities.computeHmacSignature()&lt;/code&gt; is the bytes array of the signed hexadecimal.&lt;/li&gt;&#xA;&lt;li&gt;On the other hand, at &lt;a href=&#34;https://docs.bitfinex.com/v2/docs/rest-auth&#34;&gt;this sample script&lt;/a&gt; for javascript, the data which was encrypted by &lt;code&gt;crypto.createHmac(&#39;sha384&#39;, apiSecret).update(signature).digest(&#39;hex&#39;)&lt;/code&gt; is the string of the unsigned hexadecimal.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In order to achieve above, I made the method of &lt;code&gt;bytesToHex()&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Splitting String by N Characters for Batch-file</title>
      <link>https://tanaikech.github.io/2017/12/30/splitting-string-by-n-characters-for-batch-file/</link>
      <pubDate>Sat, 30 Dec 2017 16:20:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/30/splitting-string-by-n-characters-for-batch-file/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6cbd517b165979d3c7f2018e00391680&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for splitting string by &lt;code&gt;N&lt;/code&gt; characters for batch-file. In this sample, after it retrieves &lt;code&gt;N&lt;/code&gt; characters from the first character of &lt;code&gt;STR&lt;/code&gt;, the &lt;code&gt;N&lt;/code&gt; characters are removed from &lt;code&gt;STR&lt;/code&gt;. This is repeated until the end of &lt;code&gt;STR&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-&#34;&gt;Sample script :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;@ECHO OFF&#xD;&#xA;SETLOCAL ENABLEDELAYEDEXPANSION&#xD;&#xA;SET &amp;#34;STR=ABCDEFGHIJKLMNOPQRSTUVWXYZ&amp;#34;&#xD;&#xA;&#xD;&#xA;REM Split STR by N characters&#xD;&#xA;SET &amp;#34;N=2&amp;#34;&#xD;&#xA;&#xD;&#xA;:LOOP&#xD;&#xA;SET &amp;#34;RES=%RES%!STR:~0,%N%! &amp;#34;&#xD;&#xA;SET &amp;#34;STR=!STR:~%N%!&amp;#34;&#xD;&#xA;IF DEFINED STR GOTO LOOP&#xD;&#xA;ECHO &amp;#34;%RES:~0,-1%&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;result-&#34;&gt;Result :&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;N=2&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;#34;AB CD EF GH IJ KL MN OP QR ST UV WX YZ&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;N=5&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;#34;ABCDE FGHIJ KLMNO PQRST UVWXY Z&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;reference-&#34;&gt;Reference :&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/48018220/add-a-space-between-every-other-character-to-display-values-like-mac-addresses/48019046#48019046&#34;&gt;https://stackoverflow.com/questions/48018220/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Updated Add-on - RearrangeScripts to v201</title>
      <link>https://tanaikech.github.io/2017/12/28/updated-add-on-rearrangescripts-to-v201/</link>
      <pubDate>Thu, 28 Dec 2017 08:14:02 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/28/updated-add-on-rearrangescripts-to-v201/</guid>
      <description>&lt;p&gt;RearrangeScripts was updated. Added &amp;ldquo;About&amp;rdquo; to the menu of add-on. By this, users can see the help document easily.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/rearrangescripts/ndaicidjkbcpajgejcclgfdcncpoekml?utm_source=permalink&#34;&gt;Add-on&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/RearrangeScripts&#34;&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Automatic Recalculation of Custom Function on Spreadsheet Part 1</title>
      <link>https://tanaikech.github.io/2017/12/23/automatic-recalculation-of-custom-function-on-spreadsheet-part-1/</link>
      <pubDate>Sat, 23 Dec 2017 09:59:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/23/automatic-recalculation-of-custom-function-on-spreadsheet-part-1/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/b8ea7bd7fd87bcd7bb28ddede1781889&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this report, I would like to introduce a workaround for automatically recalculating custom functions on Spreadsheet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-situation&#34;&gt;1. Situation&lt;/h2&gt;&#xA;&lt;p&gt;The sample situation is below. &lt;strong&gt;This is a sample situation for this document.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There are 3 sheets with &amp;ldquo;sheet1&amp;rdquo;, &amp;ldquo;sheet2&amp;rdquo; and &amp;ldquo;sheet3&amp;rdquo; of sheet name in a Spreadsheet.&lt;/li&gt;&#xA;&lt;li&gt;Calculate the summation of values of &amp;ldquo;A1&amp;rdquo; of each sheet using a custom function.&lt;/li&gt;&#xA;&lt;li&gt;Sample script of the custom function is as follows.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myFunction&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheets&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheets&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getValue&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2-workaround-for-recalculating&#34;&gt;2. Workaround for recalculating&lt;/h2&gt;&#xA;&lt;p&gt;When &lt;code&gt;=myFunction(&amp;quot;A1&amp;quot;)&lt;/code&gt; is put in a cell, the custom function sums each &amp;ldquo;A1&amp;rdquo; of &amp;ldquo;sheet1&amp;rdquo;, &amp;ldquo;sheet2&amp;rdquo; and &amp;ldquo;sheet3&amp;rdquo;. But in this case, when &amp;ldquo;A1&amp;rdquo; of one of 3 sheets is changed, the custom function is not recalculated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Add-on - RearrangeScripts</title>
      <link>https://tanaikech.github.io/2017/12/20/add-on-rearrangescripts/</link>
      <pubDate>Wed, 20 Dec 2017 10:28:42 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/20/add-on-rearrangescripts/</guid>
      <description>&lt;h2 id=&#34;rearrangescripts-was-published-as-an-add-on-application&#34;&gt;RearrangeScripts was published as an add-on application&lt;/h2&gt;&#xA;&lt;p&gt;Recently, I have reported RearrangeScripts for rearranging scripts in a GAS project. At that time, I got messages and mails from many developers. They said that you should publish this as an add-on. So, this was released. Now you can search &amp;ldquo;RearrangeScripts&amp;rdquo; as an add-on for Spreadsheet. If this is helpful for you, I&amp;rsquo;m happy.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/rearrangescripts/ndaicidjkbcpajgejcclgfdcncpoekml?utm_source=permalink&#34;&gt;Add-on&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tanaikech/RearrangeScripts&#34;&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/RearrangeScripts/raw/master/images/demo.gif&#34;&#xA;     alt=&#34;Add-on - RearrangeScripts&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decoding Gmail Body with Japanese Language using Python</title>
      <link>https://tanaikech.github.io/2017/12/18/decoding-gmail-body-with-japanese-language-using-python/</link>
      <pubDate>Mon, 18 Dec 2017 08:22:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/18/decoding-gmail-body-with-japanese-language-using-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/ef78cdbb978989904415b14a1c45b47f&#34;&gt;Gist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for decoding Gmail body with Japanese language using Python.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;msg &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; service&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;users()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;messages()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(userId&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;me&amp;#39;&lt;/span&gt;, id&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;id)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;execute()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;parts &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; msg[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;payload&amp;#39;&lt;/span&gt;][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;parts&amp;#39;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; e &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; parts:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    msg &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; base64&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;urlsafe_b64decode(e[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;])&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;decode(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;encode(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cp932&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ignore&amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;decode(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cp932&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(msg)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Difference Between Given Values and Retrieved Values for Shapes on Google Slides</title>
      <link>https://tanaikech.github.io/2017/12/15/difference-between-given-values-and-retrieved-values-for-shapes-on-google-slides/</link>
      <pubDate>Fri, 15 Dec 2017 16:56:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/15/difference-between-given-values-and-retrieved-values-for-shapes-on-google-slides/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/953e630855e65de55d8e5bd448ad764f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a document for explaining the difference between given values and retrieved values for shapes on Google Slides. When a shape is created to a slide using Slides API, most users give the size of height and width as &lt;code&gt;pt&lt;/code&gt;. When the size is retrieved from the created shape as &lt;code&gt;pt&lt;/code&gt;, the size is often difference from the given size.&lt;/p&gt;&#xA;&lt;p&gt;For example, when a square shape is created by giving the height and width of 100 pt, the size which is retrieved from the created square becomes 99.99212598425197 pt for the height and width.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving ClientId using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/12/08/retrieving-clientid-using-google-apps-script/</link>
      <pubDate>Fri, 08 Dec 2017 09:10:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/08/retrieving-clientid-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4656b1b01128d27f291cee317553ea6d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving clientId using Google Apps Script.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ScriptApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getOAuthToken&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bearer &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accessToken&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;params&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clientId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;azp&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;clientId&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Downloading File Using Button of Dialog Box on Google Docs</title>
      <link>https://tanaikech.github.io/2017/12/07/downloading-file-using-button-of-dialog-box-on-google-docs/</link>
      <pubDate>Thu, 07 Dec 2017 08:43:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/07/downloading-file-using-button-of-dialog-box-on-google-docs/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0f1fd11b7e4d45b016d45bbeeb06aa46&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for downloading a file using a button of dialog box on Google Docs (Spreadsheet, Document and Slides).&lt;/p&gt;&#xA;&lt;p&gt;Please use this sample script at script editor on Google Docs (Spreadsheet, Document and Slides). And please set file ID in the script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;flow-&#34;&gt;FLow :&lt;/h2&gt;&#xA;&lt;p&gt;The flow of this sample script is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Run &lt;code&gt;dialog()&lt;/code&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Open a dialog.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;When users click a download button, retrieve file ID at GAS side.&lt;/li&gt;&#xA;&lt;li&gt;Create download URL from the file ID. Download URL and filename are sent to &lt;code&gt;download(obj)&lt;/code&gt; of Javascript.&lt;/li&gt;&#xA;&lt;li&gt;Create a tag for downloading and click it at Javascript side.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By this, users can download the file of file ID.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;codegs&#34;&gt;Code.gs&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dialog&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;HtmlService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createHtmlOutputFromFile&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;download&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getUi&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;showModalDialog&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Sample dialog&amp;#39;&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// If you use other Google Docs, please modify here.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getDownloadUrl&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### file id ###&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getDownloadUrl&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;?e=download&amp;amp;gd=true&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;downloadhtml&#34;&gt;download.html&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;download&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onclick&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;getUrl()&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getUrl&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;google&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;withSuccessHandler&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;download&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getDownloadUrl&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;download&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;createElement&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;download&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;click&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Rearranging Files in GAS Project (Restricted)</title>
      <link>https://tanaikech.github.io/2017/12/05/rearranging-files-in-gas-project-restricted/</link>
      <pubDate>Tue, 05 Dec 2017 15:13:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/05/rearranging-files-in-gas-project-restricted/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4b71f86fd6c09c983c183418fdd8e88c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Recently, I have introduced a GAS library and a CLI tool for rearranging files in GAS project. Those are &lt;a href=&#34;https://github.com/tanaikech/RearrangeScripts&#34;&gt;RearrangeScripts&lt;/a&gt; and &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#rearrangescripts&#34;&gt;ggsrun&lt;/a&gt;. Because today, I found a new way for rearranging files, I would like to introduce it although there is a restriction.&lt;/p&gt;&#xA;&lt;p&gt;By the recent Google-update, users become able to create folders in GAS project. The new way uses this. At first, please see the demonstration GIF animation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20171205-rearrange_withoutLibrary.gif&#34;&#xA;     alt=&#34;Rearranging Files in GAS Project (Restricted)&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Instance of User-Interface Environment</title>
      <link>https://tanaikech.github.io/2017/12/04/retrieving-instance-of-user-interface-environment/</link>
      <pubDate>Mon, 04 Dec 2017 14:11:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/04/retrieving-instance-of-user-interface-environment/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f05e7d82b754b0348463b8dec1c741ad&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for retrieving an instance of user-interface environment for Spreadsheet, Document and Slides. When I create applications which use user interface (for example, sidebar, dialog and so on), the user interface can be used for Spreadsheet, Document and Slides. If the application doesn&amp;rsquo;t use the methods depend on Spreadsheet, Document and Slides, this script can give 3 choices to users.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getUi&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ui&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;ui&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getUi&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;ui&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DocumentApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getUi&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;ui&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SlidesApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getUi&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ui&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ui&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getUi&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ui&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;ui&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;alert&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Mixing 2 Array Objects Included Dictionary Object by Javascript</title>
      <link>https://tanaikech.github.io/2017/12/03/mixing-2-array-objects-included-dictionary-object-by-javascript/</link>
      <pubDate>Sun, 03 Dec 2017 15:45:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/03/mixing-2-array-objects-included-dictionary-object-by-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8141f8a063984a111124cd2f0e36f7fb&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for combining and mixing 2 objects. Each object is an array which included a dictionary type. When the key of the dictionary object is the same, the values are mixed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;This can be also used for Google Apps Script.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;input&#34;&gt;Input&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var obj1 = [&#xD;&#xA;    {&amp;#34;key1&amp;#34;: [&amp;#34;value1a1&amp;#34;, &amp;#34;value1a2&amp;#34;]},&#xD;&#xA;    {&amp;#34;key1&amp;#34;: [&amp;#34;value1aa1&amp;#34;, &amp;#34;value1aa2&amp;#34;]},&#xD;&#xA;    {&amp;#34;key2&amp;#34;: [&amp;#34;value2a1&amp;#34;, &amp;#34;value2a2&amp;#34;]},&#xD;&#xA;    {&amp;#34;key3&amp;#34;: [&amp;#34;value3a1&amp;#34;, &amp;#34;value3a2&amp;#34;]},&#xD;&#xA;];&#xD;&#xA;var obj2 = [&#xD;&#xA;    {&amp;#34;key1&amp;#34;: [&amp;#34;value1b1&amp;#34;, &amp;#34;value1b2&amp;#34;]},&#xD;&#xA;    {&amp;#34;key3&amp;#34;: [&amp;#34;value3b1&amp;#34;, &amp;#34;value3b2&amp;#34;]},&#xD;&#xA;    {&amp;#34;key3&amp;#34;: [&amp;#34;value3bb1&amp;#34;, &amp;#34;value3bb2&amp;#34;]},&#xD;&#xA;    {&amp;#34;key4&amp;#34;: [&amp;#34;value4b1&amp;#34;, &amp;#34;value4b2&amp;#34;]},&#xD;&#xA;];&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;output&#34;&gt;Output&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[&#xD;&#xA;    {&amp;#34;key1&amp;#34;: [&amp;#34;value1a1&amp;#34;, &amp;#34;value1a2&amp;#34;, &amp;#34;value1b1&amp;#34;, &amp;#34;value1b2&amp;#34;, &amp;#34;value1aa1&amp;#34;, &amp;#34;value1aa2&amp;#34;]},&#xD;&#xA;    {&amp;#34;key2&amp;#34;: [&amp;#34;value2a1&amp;#34;, &amp;#34;value2a2&amp;#34;]},&#xD;&#xA;    {&amp;#34;key3&amp;#34;: [&amp;#34;value3a1&amp;#34;, &amp;#34;value3a2&amp;#34;, &amp;#34;value3b1&amp;#34;, &amp;#34;value3b2&amp;#34;, &amp;#34;value3bb1&amp;#34;, &amp;#34;value3bb2&amp;#34;]},&#xD;&#xA;    {&amp;#34;key4&amp;#34;: [&amp;#34;value4b1&amp;#34;, &amp;#34;value4b2&amp;#34;]}&#xD;&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;sample-script-&#34;&gt;Sample script :&lt;/h2&gt;&#xA;&lt;h3 id=&#34;javascript-&#34;&gt;Javascript :&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mixture&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;obj2&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;apply&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;obj2&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;obj1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!~&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;indexOf&lt;/span&gt;(Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;apply&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;][Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]], &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;[Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;keys&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1a1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1a2&amp;#34;&lt;/span&gt;]},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1aa1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1aa2&amp;#34;&lt;/span&gt;]},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2a1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2a2&amp;#34;&lt;/span&gt;]},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3a1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3a2&amp;#34;&lt;/span&gt;]},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1b1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1b2&amp;#34;&lt;/span&gt;]},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3b1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3b2&amp;#34;&lt;/span&gt;]},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key3&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3bb1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3bb2&amp;#34;&lt;/span&gt;]},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;key4&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value4b1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value4b2&amp;#34;&lt;/span&gt;]},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mixture&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;obj2&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;coffeescript-&#34;&gt;CoffeeScript :&lt;/h3&gt;&#xA;&lt;p&gt;This is a sample script for coffeescript.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding Object to Object by Javascript</title>
      <link>https://tanaikech.github.io/2017/12/01/adding-object-to-object-by-javascript/</link>
      <pubDate>Fri, 01 Dec 2017 12:12:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/12/01/adding-object-to-object-by-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7bd06771e627afd9957ef4f13c9661d5&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for adding object to object by javascript.&lt;/p&gt;&#xA;&lt;h3 id=&#34;script-&#34;&gt;Script :&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;key1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value1&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;key2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value2&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;key3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value3&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;key4&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value4&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;key5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value5&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;key6&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value6&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;assign&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;obj1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;result-&#34;&gt;Result :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{ &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;key1:&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;value1&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;key2:&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;value2&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;key3:&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;value3&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;key4:&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;value4&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;key5:&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;value5&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;key6:&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;value6&amp;#39;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://jsfiddle.net/896feLjk/&#34;&gt;jsfiddle demo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;reference-&#34;&gt;Reference :&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign&#34;&gt;Object.assign()&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Taking Advantage of Manifests by GAS Library</title>
      <link>https://tanaikech.github.io/2017/11/23/taking-advantage-of-manifests-by-gas-library/</link>
      <pubDate>Thu, 23 Nov 2017 20:21:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/11/23/taking-advantage-of-manifests-by-gas-library/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/23ddf599a4155b66f1029978bba8153b&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;By recent Google update (&lt;a href=&#34;https://developers.google.com/apps-script/&#34;&gt;Google update at October 24, 2017&lt;/a&gt;), various new winds to GAS developers were blown. There is &amp;ldquo;&lt;a href=&#34;https://developers.google.com/apps-script/concepts/manifests&#34;&gt;Manifests&lt;/a&gt;&amp;rdquo; as one of the new winds. &amp;ldquo;Manifests&amp;rdquo; makes us manage the project using JSON. Especially, the special scopes which have to use OAuth2 process can be used by only setting them to the Manifests. I think that this is the largest modification. However, when scopes are added to a project using Manifests, users who use the project can use only added scopes. This means that when users create scripts in the project, if there are some scopes which is required to be added, such scopes cannot be automatically added. So the error of &amp;ldquo;Insufficient Permission&amp;rdquo; occurs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Size of Tables in Google Slides using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/11/21/retrieving-size-of-tables-in-google-slides-using-google-apps-script/</link>
      <pubDate>Tue, 21 Nov 2017 11:24:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/11/21/retrieving-size-of-tables-in-google-slides-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3143be7e7df8cc595d73427d22ae2e0e&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for retrieving the size (width and height) of a table in Google Slides using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;There are no methods for directly retrieving the table size using SlidesApp yet. So I thought of a workaround using Slides API.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the slide information is retrieved using &lt;code&gt;Slides.Presentations.Pages.get()&lt;/code&gt; of Slides API, the information of tables is also included. In the information, the height and width of table are also included.&lt;/li&gt;&#xA;&lt;li&gt;But the unit is EMU (English Metric Unit), and the height and width is separated by each cell. So it is required to sum each height and width while modifying the unit.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The modified script reflected this is as follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SlideApp for Google Slides</title>
      <link>https://tanaikech.github.io/2017/11/13/slideapp-for-google-slides/</link>
      <pubDate>Mon, 13 Nov 2017 14:17:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/11/13/slideapp-for-google-slides/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0d8110aa9a6f7c1b8848e10a702628a1&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By recent Google updated, Class SlideApp is added to Google Slides. SlideApp will be bring a lot of applications. Here, I would like to introduce 2 samples.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-sidebar&#34;&gt;1. Sidebar&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;showSidebar&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;HtmlService&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;createHtmlOutput&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Hello, world! &amp;lt;input type=&amp;#34;button&amp;#34; value=&amp;#34;Close&amp;#34; onclick=&amp;#34;google.script.host.close()&amp;#34; /&amp;gt;&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;setTitle&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;My custom sidebar&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;setWidth&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;SlidesApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getUi&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;showSidebar&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2-copy-slides-in-existing-slide-to-a-new-slide&#34;&gt;2. Copy slides in existing Slide to a new Slide&lt;/h2&gt;&#xA;&lt;p&gt;This sample script create a new Slide with slides you want to copy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - RearrangeScripts</title>
      <link>https://tanaikech.github.io/2017/11/13/gas-library-rearrangescripts/</link>
      <pubDate>Mon, 13 Nov 2017 09:30:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/11/13/gas-library-rearrangescripts/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a GAS application for rearranging Google Apps Scripts (GAS) in a project which can be seen at the script editor.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Have you ever thought about rearranging Google Apps Scripts in a project which can be seen at the script editor? I also have thought about it. Finally, I could find the workaround to do it. And recently, I have given this function to &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#rearrangescripts&#34;&gt;ggsrun&lt;/a&gt; which is a CLI tool. Furthermore, I thought that if there is a GUI application for rearranging scripts in a project, it may be useful for more users. So I created this. Today, I published this as a GUI tool using Google Apps Script. If this was useful for you, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - ZipFolder</title>
      <link>https://tanaikech.github.io/2017/11/12/gas-library-zipfolder/</link>
      <pubDate>Sun, 12 Nov 2017 15:52:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/11/12/gas-library-zipfolder/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a library for zipping a folder using Google Apps Scripts.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When users manually download a folder on Google Drive, users can download all files in the folder as a zip file using the web interface. &lt;a href=&#34;https://developers.google.com/apps-script/reference/utilities/utilities&#34;&gt;There are zip tools in Class Utilities of Google Apps Script&lt;/a&gt;. However, the zip tools cannot create a zip file from a folder. And it cannot retrieve all files included any folders in a folder. So I created this. This library works like almost the same to the web interface using GAS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - ManifestsApp</title>
      <link>https://tanaikech.github.io/2017/11/09/gas-library-manifestsapp/</link>
      <pubDate>Thu, 09 Nov 2017 10:47:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/11/09/gas-library-manifestsapp/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a Manifests library for Google Apps Scripts.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;By recent update of Google, &lt;a href=&#34;https://developers.google.com/apps-script/concepts/manifests&#34;&gt;Manifests&lt;/a&gt; was added to Google Apps Script Project. At the moment I saw the detail, I thought that this Manifests will blow a new wind for a lot of GAS developers. So I created this.&lt;/p&gt;&#xA;&lt;p&gt;This library makes users easily access Manifests using Google Apps Script. If this was useful for you, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/ManifestsApp/raw/master/images/demo.gif&#34;&#xA;     alt=&#34;GAS Library - ManifestsApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - ProjectApp</title>
      <link>https://tanaikech.github.io/2017/11/08/gas-library-projectapp/</link>
      <pubDate>Wed, 08 Nov 2017 11:20:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/11/08/gas-library-projectapp/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a GAS project library for Google Apps Script (GAS).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;Description&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;There are Class SpreadsheetApp and Class DocumentApp for operating spreadsheet and document, respectively. But there is no Class for operating GAS project. If there is the Class ProjectApp, GAS project can be directly operated by GAS script. I thought that this will lead to new applications, and created ProjectApp.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, as a CLI tool for operating GAS project, there has already been &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;ggsrun&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Local Files to Google Drive without Authorization using HTML Form</title>
      <link>https://tanaikech.github.io/2017/11/06/uploading-local-files-to-google-drive-without-authorization-using-html-form/</link>
      <pubDate>Mon, 06 Nov 2017 08:54:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/11/06/uploading-local-files-to-google-drive-without-authorization-using-html-form/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/2f16f467c94612dc83920a3158614d95&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for uploading local file to Google Drive without the authorization using HTML form. A selected file in your local PC using HTML form is uploaded to Google Drive and saved to Google Drive.&lt;/p&gt;&#xA;&lt;p&gt;When you use this, at first, please &lt;a href=&#34;https://developers.google.com/apps-script/guides/web#deploying_a_script_as_a_web_app&#34;&gt;deploy Web Apps&lt;/a&gt;. The script is &lt;code&gt;doPost()&lt;/code&gt; of following scripts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;script--google-apps-script&#34;&gt;Script : Google Apps Script&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doPost&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;base64Decode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parameters&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Utilities&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;newBlob&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parameters&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mimetype&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parameters&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;output&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;HtmlService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createHtmlOutput&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;b&amp;gt;Done!&amp;lt;/b&amp;gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;output&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setXFrameOptionsMode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;HtmlService&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;XFrameOptionsMode&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ALLOWALL&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;output&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// return ContentService.createTextOutput(&amp;#34;Done.&amp;#34;) &amp;lt;--- Here, an error occurred.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;flow-&#34;&gt;Flow :&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Retrieve data, filename and mimetype as &lt;code&gt;e.parameters.data&lt;/code&gt;, &lt;code&gt;e.parameters.filename&lt;/code&gt; and &lt;code&gt;e.parameters.mimetype&lt;/code&gt;, respectively.&lt;/li&gt;&#xA;&lt;li&gt;Decode the data using &lt;code&gt;Utilities.base64Decode()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Create blob using &lt;code&gt;Utilities.newBlob()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Create the file in the root folder of Google Drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;script--html&#34;&gt;Script : HTML&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;https://script.google.com/macros/s/#####/exec&lt;/code&gt; is the URL obtained when the Web Apps was deployed. Please replace it to your Web Apps URL. You can open this HTML for the browser of your local PC.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create New Project with Original Manifests</title>
      <link>https://tanaikech.github.io/2017/10/31/create-new-project-with-original-manifests/</link>
      <pubDate>Tue, 31 Oct 2017 16:56:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/10/31/create-new-project-with-original-manifests/</guid>
      <description>&lt;p&gt;It was found that you can also create new project with your original Manifests using ggsrun. By using this, for example, when you created new project, the project can have libraries, Advanced Google Services and so on at the initial stage. I think that this can be used as a template for Project.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ggsrun u -pn &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Project name&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; -f appsscript.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#ModifyManifests&#34;&gt;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#ModifyManifests&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/demo_manifests2.gif&#34;&#xA;     alt=&#34;Create New Project with Original Manifests&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;You can check this and download ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v133</title>
      <link>https://tanaikech.github.io/2017/10/30/updated-ggsrun-to-v133/</link>
      <pubDate>Mon, 30 Oct 2017 14:00:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/10/30/updated-ggsrun-to-v133/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v133&#34;&gt;ggsrun was updated to v.1.3.3&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.3.3 (October 30, 2017)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/apps-script/&#34;&gt;At October 24, 2017, &amp;ldquo;Manifests&amp;rdquo; which is new function for controlling the properties of Google Apps Script was added (GAS).&lt;/a&gt; You can see the detail of &amp;ldquo;Manifests&amp;rdquo; &lt;a href=&#34;https://developers.google.com/apps-script/concepts/manifests&#34;&gt;here&lt;/a&gt;. &lt;strong&gt;In order to modify the manifests from local PC, I added this new function to ggsrun. By using this, you can edit the manifests and update it from your local PC.&lt;/strong&gt; The usage is &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#ModifyManifests&#34;&gt;here&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Some modifications.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;awesome-points-of-manifests-&#34;&gt;Awesome points of Manifests :&lt;/h2&gt;&#xA;&lt;p&gt;Awesome points of Manifests that I think are below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Measuring Execution Time of Built-In Functions for Google Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/10/27/measuring-execution-time-of-built-in-functions-for-google-spreadsheet/</link>
      <pubDate>Fri, 27 Oct 2017 10:06:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/10/27/measuring-execution-time-of-built-in-functions-for-google-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/1e7df0d6991d4e39330cd2b353573e72&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for measuring the execution time of &lt;a href=&#34;https://support.google.com/drive/topic/1361471&#34;&gt;built-in functions&lt;/a&gt; for Google Spreadsheet. Unfortunately, there are not measurement tools for retrieving the execution time of built-in functions. So I thought of about a workaround.&lt;/p&gt;&#xA;&lt;h2 id=&#34;flow-&#34;&gt;Flow :&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Import a value to a cell. The value is anything good, because this is used as a trigger. Please do this by yourself.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Custom functions cannot use &lt;code&gt;setValue()&lt;/code&gt;. So I used &lt;code&gt;onEdit()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;func1()&lt;/code&gt; imports a formula that you want to measure the execution time by the script launched by the trigger.&lt;/li&gt;&#xA;&lt;li&gt;At &lt;code&gt;func2()&lt;/code&gt;, after set the formula, the measurement is started. The confirmation when built-in function was completed is carried out using loop.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By measuring the cost per one call for &lt;code&gt;getValue()&lt;/code&gt;, it was found that that was about 0.0003 s. So I thought that this can be used.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The result of measurement can be seen at Stackdriver as milliseconds.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;sample-script-&#34;&gt;Sample script :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;func1&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;formula&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setFormula&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;formula&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;func2&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getValue&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getValue&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onEdit&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;formula&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;### Built-in function ###&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Set the built-in function you want to measure.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;label&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Execution time for built-in functions.&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSheet&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cell&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveCell&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cell&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRow&lt;/span&gt;(), &lt;span style=&#34;color:#a6e22e&#34;&gt;cell&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getColumn&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;func1&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;formula&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;label&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;func2&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;timeEnd&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;label&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;note-&#34;&gt;Note :&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When built-in functions with very long time is measured, an error may occur at &lt;code&gt;getValue()&lt;/code&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In my environment, the built-in function for 10 seconds worked fine.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Straightening Elements in 2 Dimensional Array using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/10/26/straightening-elements-in-2-dimensional-array-using-google-apps-script/</link>
      <pubDate>Thu, 26 Oct 2017 16:51:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/10/26/straightening-elements-in-2-dimensional-array-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/6a8b169cdcbda5a84f19964b81e447d9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for straightening elements in 2 dimensional array using Google Apps Script (GAS). When applications using Spreadsheet are developed by GAS, it usually uses 2 dimensional array by &lt;code&gt;setValues()&lt;/code&gt;. And the lengths of each element are required to be the same. On the other hand, data used for the applications might not be the same length for each element in 2 dimensional array. This sample script can be used under such situation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v132</title>
      <link>https://tanaikech.github.io/2017/10/20/updated-ggsrun-to-v132/</link>
      <pubDate>Fri, 20 Oct 2017 16:43:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/10/20/updated-ggsrun-to-v132/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v132&#34;&gt;ggsrun was updated to v.1.3.2&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;v1.3.2 (October 20, 2017)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Updated ggsrun&amp;rsquo;s Install manual (README.md). Since I thought that the manual became too complicated, I separated it to &lt;a href=&#34;https://github.com/tanaikech/ggsrun/&#34;&gt;the simple version&lt;/a&gt; and &lt;a href=&#34;https://github.com/tanaikech/ggsrun/tree/master/help&#34;&gt;the detail version&lt;/a&gt;. And also , recently, since Google&amp;rsquo;s specification was updated, about how to deploy API executable and enable APIs for ggsrun&amp;rsquo;s Install manual were updated.&lt;/li&gt;&#xA;&lt;li&gt;From this version, scripts in a project can be rearranged. The rearrangement can be done by interactively on your terminal and/or a configuration file. The usage is &lt;a href=&#34;https://github.com/tanaikech/ggsrun/blob/master/help/README.md#rearrangescripts&#34;&gt;here&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For rearranging scripts, there is one important point. &lt;strong&gt;When scripts in a project is rearranged, version history of scripts is reset once. So if you don&amp;rsquo;t want to reset the version history, before rearranging, please copy the project.&lt;/strong&gt; By copying project, the project before rearranging is saved.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/ggsrun/raw/master/help/images/demo_rearrange.gif&#34;&#xA;     alt=&#34;Updated ggsrun to v132&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated go-rearrange and gorearrange to v102</title>
      <link>https://tanaikech.github.io/2017/10/18/updated-go-rearrange-and-gorearrange-to-v102/</link>
      <pubDate>Wed, 18 Oct 2017 14:45:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/10/18/updated-go-rearrange-and-gorearrange-to-v102/</guid>
      <description>&lt;h1 id=&#34;go-rearrange-and-gorearrange-were-updated-to-v102&#34;&gt;go-rearrange and gorearrange were updated to v.1.0.2&lt;/h1&gt;&#xA;&lt;p&gt;From this version, data included multi-bytes characters can be used. At Linux, it works fine. At Windows DOS, rearranging and selecting data can be done. But the displayed data is shifted. Although this may be a bug of termbox-go, I don&amp;rsquo;t know the reason. I&amp;rsquo;m sorry. On the other hand, data with only single-byte characters works fine. About MAC, I don&amp;rsquo;t have it. If someone can confirm and tell me it, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated go-rearrange and gorearrange to v101</title>
      <link>https://tanaikech.github.io/2017/10/16/updated-go-rearrange-and-gorearrange-to-v101/</link>
      <pubDate>Mon, 16 Oct 2017 15:37:09 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/10/16/updated-go-rearrange-and-gorearrange-to-v101/</guid>
      <description>&lt;h1 id=&#34;go-rearrange-and-gorearrange-were-updated-to-v101&#34;&gt;go-rearrange and gorearrange were updated to v.1.0.1&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As one of outputs, &lt;strong&gt;indexmode (bool)&lt;/strong&gt; was added. If this is true, the rearranged result is output as the change of index for the source data. For example, if the source data and rearranged data are &lt;code&gt;[&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;]&lt;/code&gt; and &lt;code&gt;[&amp;quot;c&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;a&amp;quot;]&lt;/code&gt;, respectively. The output will become &lt;code&gt;[2, 1, 0]&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;By this, the specification for creating applications will expand.&lt;/p&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/gorearrange&#34;&gt;https://github.com/tanaikech/gorearrange&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CLI Tool - gorearrange</title>
      <link>https://tanaikech.github.io/2017/10/15/cli-tool-gorearrange/</link>
      <pubDate>Sun, 15 Oct 2017 16:43:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/10/15/cli-tool-gorearrange/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a CLI tool to interactively rearrange a text data on a terminal.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;Since I couldn&amp;rsquo;t find CLI tools for manually rearranging text data, I created this CLI tool.&lt;/p&gt;&#xA;&lt;p&gt;For this, at first, I created a Golang library &lt;a href=&#34;https://github.com/tanaikech/go-rearrange/&#34;&gt;go-rearrange&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/gorearrange/raw/master/images/demo_ubuntu.gif&#34;&#xA;     alt=&#34;CLI Tool - gorearrange&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/gorearrange&#34;&gt;https://github.com/tanaikech/gorearrange&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enhanced onEdit(e) using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/10/11/enhanced-onedite-using-google-apps-script/</link>
      <pubDate>Wed, 11 Oct 2017 09:43:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/10/11/enhanced-onedite-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/73edaed1268a6d07118aed538aa5608d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;onEdit(e)&lt;/code&gt; which is used for the Edit event on Spreadsheet has the old value as &lt;code&gt;e.oldValue&lt;/code&gt;. The specifications for this are as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When an user edited a single &amp;ldquo;A1&amp;rdquo; cell, &lt;code&gt;e&lt;/code&gt; of &lt;code&gt;onEdit(e)&lt;/code&gt; shows &lt;code&gt;hoge&lt;/code&gt; for &lt;code&gt;e.oldValue&lt;/code&gt; and &lt;code&gt;fuga&lt;/code&gt; for &lt;code&gt;e.value&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;When an user edited the &amp;ldquo;A1:A2&amp;rdquo; multiple cells, &lt;code&gt;e.oldValue&lt;/code&gt; and &lt;code&gt;e.value&lt;/code&gt; of &lt;code&gt;onEdit(e)&lt;/code&gt; are not shown anything.&lt;/li&gt;&#xA;&lt;li&gt;When an user copied and pasted from other cell, &lt;code&gt;e.oldValue&lt;/code&gt; and &lt;code&gt;e.value&lt;/code&gt; of &lt;code&gt;onEdit(e)&lt;/code&gt; are not shown anything.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This sample script was created to retrieve both the edited values and the old values for the range of edited cells. This is the modified &lt;code&gt;e.oldValue&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2017/09/24/updated-gas-library-onedriveapp/</link>
      <pubDate>Sun, 24 Sep 2017 15:36:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/09/24/updated-gas-library-onedriveapp/</guid>
      <description>&lt;p&gt;OnedriveApp was updated to v1.1.0.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp#authprocess&#34;&gt;From this version, retrieving access token and refresh token became more easy.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/OnedriveApp/raw/master/images/demo_auth.gif&#34;&#xA;     alt=&#34;Updated: GAS Library - OnedriveApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;GitHub of OnedriveApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading CSV File as Spreadsheet and Modifying Permissions using Golang</title>
      <link>https://tanaikech.github.io/2017/09/21/uploading-csv-file-as-spreadsheet-and-modifying-permissions-using-golang/</link>
      <pubDate>Thu, 21 Sep 2017 15:43:14 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/09/21/uploading-csv-file-as-spreadsheet-and-modifying-permissions-using-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/7ee103c80759a8297da198a5d1e92fc8&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for uploading CSV file as Spreadsheet and modifying permissions using Golang.&lt;/p&gt;&#xA;&lt;p&gt;I think that the detail information of &lt;strong&gt;google-api-go-client&lt;/strong&gt; is a bit little. The sample scripts are so little. It retrieves most information from only &lt;a href=&#34;https://godoc.org/google.golang.org/api/drive/v3&#34;&gt;godoc&lt;/a&gt; and &lt;a href=&#34;https://github.com/google/google-api-go-client/tree/master/drive&#34;&gt;GitHub&lt;/a&gt;. So I publish such sample scripts here. If this is useful for you, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;h2 id=&#34;important-points-&#34;&gt;Important points :&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Give mimeType of file that it wants to upload to &lt;code&gt;options&lt;/code&gt; of &lt;code&gt;Media(r io.Reader, options ...googleapi.MediaOption)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;In order to give &lt;code&gt;options&lt;/code&gt;, use &lt;code&gt;googleapi.ContentType()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Give mimeType of file that it wants to convert, when it uploads it to Google Drive, to &lt;code&gt;file&lt;/code&gt; of &lt;code&gt;Create(file *File)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;In order to give &lt;code&gt;file&lt;/code&gt;, use &lt;code&gt;&amp;amp;drive.File{}&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;For installing permissions, use &lt;code&gt;&amp;amp;drive.Permission{}&lt;/code&gt;. Each parameter is the same to them for Python.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;This sample script uses &lt;a href=&#34;https://developers.google.com/drive/v3/web/quickstart/go&#34;&gt;Quickstart&lt;/a&gt;. So in order to use this sample script, at first, please do Step 1 and Step 2 of the Quickstart.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Selecting Files in Google Drive using Select Box for Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/09/17/selecting-files-in-google-drive-using-select-box-for-google-apps-script/</link>
      <pubDate>Sun, 17 Sep 2017 13:26:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/09/17/selecting-files-in-google-drive-using-select-box-for-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/96166a32e7781fee22da9e498b2289d0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for selecting files in Google Drive using HTML select box for Google Apps Script.&lt;/p&gt;&#xA;&lt;h1 id=&#34;feature&#34;&gt;Feature&lt;/h1&gt;&#xA;&lt;p&gt;Feature of this sample.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It is a simple and space saving.&lt;/li&gt;&#xA;&lt;li&gt;When the folder is selected, the files in the folder are shown.&lt;/li&gt;&#xA;&lt;li&gt;When the file is selected, the ID of file is retrieved. Users can use this ID at GAS.&lt;/li&gt;&#xA;&lt;li&gt;When a folder is opened, all files in the folder are cached. By this, the second access of the folder is faster.&lt;/li&gt;&#xA;&lt;li&gt;It doesn&amp;rsquo;t retrieve all files in Google Drive at once, so the read of files from Google Drive becomes the minimum necessary.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;I will use this for applications that users need to select files on Google Drive.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>spreadsheets.values.batchUpdate using Golang</title>
      <link>https://tanaikech.github.io/2017/09/15/spreadsheets.values.batchupdate-using-golang/</link>
      <pubDate>Fri, 15 Sep 2017 14:14:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/09/15/spreadsheets.values.batchupdate-using-golang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/0f5b15fec7f409cdb568b0c2904fccb2&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;flow-&#34;&gt;Flow :&lt;/h2&gt;&#xA;&lt;p&gt;In my sample script, the script was made using the Quickstart. The flow to use this sample script is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For &lt;a href=&#34;https://developers.google.com/sheets/api/quickstart/go&#34;&gt;Go Quickstart&lt;/a&gt;, please do Step 1 and Step 2.&lt;/li&gt;&#xA;&lt;li&gt;Please put &lt;code&gt;client_secret.json&lt;/code&gt; to the same directory with my sample script.&lt;/li&gt;&#xA;&lt;li&gt;Copy and paste my sample script, and create it as new script file.&lt;/li&gt;&#xA;&lt;li&gt;Run the script.&lt;/li&gt;&#xA;&lt;li&gt;When &lt;code&gt;Go to the following link in your browser then type the authorization code:&lt;/code&gt; is shown on your terminal, please copy the URL and paste to your browser. And then, please authorize and get code.&lt;/li&gt;&#xA;&lt;li&gt;Put the code to the terminal.&lt;/li&gt;&#xA;&lt;li&gt;When &lt;code&gt;Done.&lt;/code&gt; is displayed, it means that the update of spreadsheet is done.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;request-body-&#34;&gt;Request body :&lt;/h2&gt;&#xA;&lt;p&gt;For &lt;code&gt;Spreadsheets.Values.BatchUpdate&lt;/code&gt;, &lt;code&gt;BatchUpdateValuesRequest&lt;/code&gt; is required as one of parameters. In this case, the range, values and so on that you want to update are included in &lt;code&gt;BatchUpdateValuesRequest&lt;/code&gt;. The detail information of this &lt;code&gt;BatchUpdateValuesRequest&lt;/code&gt; can be seen at &lt;a href=&#34;https://godoc.org/google.golang.org/api/sheets/v4#BatchUpdateValuesRequest&#34;&gt;godoc&lt;/a&gt;. When it sees &lt;code&gt;BatchUpdateValuesRequest&lt;/code&gt;, &lt;code&gt;Data []*ValueRange&lt;/code&gt; can be seen. Here, please be carefull that &lt;code&gt;Data&lt;/code&gt; is &lt;code&gt;[]*ValueRange&lt;/code&gt;. Also &lt;code&gt;ValueRange&lt;/code&gt; can be seen at &lt;a href=&#34;https://godoc.org/google.golang.org/api/sheets/v4#ValueRange&#34;&gt;godoc&lt;/a&gt;. You can see &lt;code&gt;MajorDimension&lt;/code&gt;, &lt;code&gt;Range&lt;/code&gt; and &lt;code&gt;Values&lt;/code&gt; in &lt;code&gt;ValueRange&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v131</title>
      <link>https://tanaikech.github.io/2017/09/15/updated-ggsrun-to-v131/</link>
      <pubDate>Fri, 15 Sep 2017 10:12:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/09/15/updated-ggsrun-to-v131/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v131&#34;&gt;ggsrun was updated to v.1.3.1&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Recently, when scripts on local PC is uploaded to Google Drive as a new project, the time to create on Google became a bit long. (I think that this is due to Google Update.) Under this situation, when the script is uploaded, the timeout error occurs while the new project is created using the script. So the time until timeout of fetch was modified from 10 seconds to 30 seconds. By this, when the script is uploaded, no error occurs and the information of the created project is shown.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can create a new project on Google Drive using scripts on local PC. The sample command is &lt;code&gt;ggsrun u -f sample.gs1,sample2.gs,sample3.html -pn newprojectname&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You can check this and download ggsrun at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Image Files to Slack Using Incoming Webhooks by Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/09/07/uploading-image-files-to-slack-using-incoming-webhooks-by-google-apps-script/</link>
      <pubDate>Thu, 07 Sep 2017 12:37:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/09/07/uploading-image-files-to-slack-using-incoming-webhooks-by-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/159cec05583c6f206e144f33b4042559&#34;&gt;Gist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for uploading image files to Slack using Incoming Webhooks by Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;When users try to upload image files to Slack using Incoming Webhooks, it has been known that although the access token is required to directly upload them, Incoming Webhooks can upload them by using the tag of &lt;code&gt;image_url&lt;/code&gt;. In this sample script, it uploads image files (BMP, GIF, JPEG and PNG) on Google Drive to Slack using Incoming Webhooks. The script is written by Google Apps Script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Files with Filename Included Special Characters using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/09/07/retrieving-files-with-filename-included-special-characters-using-google-apps-script/</link>
      <pubDate>Thu, 07 Sep 2017 10:40:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/09/07/retrieving-files-with-filename-included-special-characters-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/e74ead2537b7b3718fc824b6ca60a531&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for retrieving files with filename included special characters using Google Apps Script. The files are used on Google Drive.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The files with filename of special characters cannot be retrieved using &lt;code&gt;DriveApp.getFilesByName()&lt;/code&gt;. This workaround solved this.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;As a query parameter, &lt;code&gt;name contains &#39;filename with special characters&#39;&lt;/code&gt; is used. This &lt;code&gt;contains&lt;/code&gt; is very important. &lt;code&gt;name=&#39;filename with special characters&#39;&lt;/code&gt; cannot retrieve such files. Today, it was found that &lt;code&gt;name contains &#39;filename with special characters&#39;&lt;/code&gt; is the workaround. I have been looking for this workaround for a while. Finally, I found this today. By using this method, filename included umlauts can be also retrieved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Removing Duplicated Values in Array using CoffeeScript</title>
      <link>https://tanaikech.github.io/2017/09/06/removing-duplicated-values-in-array-using-coffeescript/</link>
      <pubDate>Wed, 06 Sep 2017 16:42:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/09/06/removing-duplicated-values-in-array-using-coffeescript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c1c1fa40062477ad028c6ecdeef62634&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for removing duplicated values in array using CoffeeScript.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-coffeescript&#34; data-lang=&#34;coffeescript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ar = [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;res = &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;(e, i, s) -&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;indexOf&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; [ &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt; ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The result which was compiled by CoffeeScript is as follows.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;indexOf&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Enhanced copyTo() using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/09/03/enhanced-copyto-using-google-apps-script/</link>
      <pubDate>Sun, 03 Sep 2017 10:35:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/09/03/enhanced-copyto-using-google-apps-script/</guid>
      <description>&lt;p&gt;Here, it introduces an application of &lt;a href=&#34;https://gist.github.com/tanaikech/d71eaa978d26f649bb1a25c67d279e43&#34;&gt;Retrieving Spreadsheet ID from Range using Google Apps Script&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Please check this. &lt;a href=&#34;https://github.com/tanaikech/getSpreadsheetByRange&#34;&gt;https://github.com/tanaikech/getSpreadsheetByRange&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Spreadsheet ID from Range using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/08/31/retrieving-spreadsheet-id-from-range-using-google-apps-script/</link>
      <pubDate>Thu, 31 Aug 2017 13:50:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/31/retrieving-spreadsheet-id-from-range-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d71eaa978d26f649bb1a25c67d279e43&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving spreadsheet ID from a range using Google Apps Script. I sometimes want to retrieve spreadsheet ID from ranges. In such case, I always use this.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Range&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Retrieve Sheet using &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/range#getsheet&#34;&gt;&lt;code&gt;getSheet()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Retrieve Spreadsheet using &lt;a href=&#34;https://developers.google.com/apps-script/reference/spreadsheet/sheet#getParent()&#34;&gt;&lt;code&gt;getParent()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Retrieve spreadsheet ID&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;123456789abcdefg&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cells&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a1:b10&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;openById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheet&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cells&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getParent&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;---&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;123456789&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;abcdefg&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v130</title>
      <link>https://tanaikech.github.io/2017/08/30/updated-ggsrun-to-v130/</link>
      <pubDate>Wed, 30 Aug 2017 15:08:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/30/updated-ggsrun-to-v130/</guid>
      <description>&lt;h3 id=&#34;ggsrun-was-updated-to-v130&#34;&gt;ggsrun was updated to v.1.3.0&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From this version, &lt;a href=&#34;https://developers.google.com/apps-script/guides/bound&#34;&gt;container-bound scripts&lt;/a&gt; can be downloaded. The container-bound script is the script created at the script editor on Google Sheets, Docs, or Forms file.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In order to download container-bound scripts, the project ID of container-bound scripts is required. The project ID can be retrieved as follows.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Open the project. And please operate follows using click.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-&amp;gt; File&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Project properties&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Get Script ID (&lt;strong&gt;This is the project ID.&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;When a project is downloaded, the filename of HTML file had become &lt;code&gt;.gs&lt;/code&gt;. This bug was modified.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;The usage is &lt;a href=&#34;https://github.com/tanaikech/ggsrun#DownloadBoundScript&#34;&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Values By Header Title for Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/08/27/retrieving-values-by-header-title-for-spreadsheet/</link>
      <pubDate>Sun, 27 Aug 2017 14:05:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/27/retrieving-values-by-header-title-for-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/3036ee0199e2261f377aacbd7e458d1c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving values by header title for Spreadsheet. This is created by Google Apps Script. The main script is as follows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;main-script-&#34;&gt;Main script :&lt;/h2&gt;&#xA;&lt;p&gt;When the instance is retrieved, all data of the sheet is analyzed. So when the each value is retrieved, the speed is fast.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetValueByKey&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetname&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetname&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;getValueByKey&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetname&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;alldata&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetname&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      } &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Error(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: No sheetname (&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetname&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;).&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;alldata&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getDataRange&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getValues&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;alldata&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;alldata&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;shift&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;manageddata&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;alldata&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;len1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;alldata&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;alldata&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;len1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len1&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;headerLength&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;dataLength&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;alldata&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      })(&lt;span style=&#34;color:#a6e22e&#34;&gt;header&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;alldata&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getValue&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;manageddata&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;values&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;][&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getAllValues&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;manageddata&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  })();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getValueByKey&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;})(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;Following sheet is a sample sheet for this.&#xA;&lt;img src=&#34;https://tanaikech.github.io/img/20170827fig1.png&#34;&#xA;     alt=&#34;Retrieving Values By Header Title for Spreadsheet&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exporting Project on Google Drive using Golang Quickstart</title>
      <link>https://tanaikech.github.io/2017/08/27/exporting-project-on-google-drive-using-golang-quickstart/</link>
      <pubDate>Sun, 27 Aug 2017 12:01:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/27/exporting-project-on-google-drive-using-golang-quickstart/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/29d2d31cbe6e0d9bd662aedb121384f0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for exporting a project on Google Drive to local PC using Golang Quickstart. A file with refresh token is saved to the same directory with this script as &lt;code&gt;go-quickstart.json&lt;/code&gt;. Before you run this script, please enable Drive API on your Google API console.&lt;/p&gt;&#xA;&lt;h2 id=&#34;points-for-exporting-project&#34;&gt;Points for exporting project&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In order to export project, both &lt;code&gt;drive.DriveScriptsScope&lt;/code&gt; and &lt;code&gt;drive.DriveScope&lt;/code&gt; have to be included in the scope.&lt;/li&gt;&#xA;&lt;li&gt;The mimeType for exporting has to be &amp;ldquo;application/vnd.google-apps.script+json&amp;rdquo;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;If you already have the file with refresh token, at first, please delete it and run this script. By this, the scopes of refresh token and access token are updated.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2017/08/21/updated-gas-library-onedriveapp/</link>
      <pubDate>Mon, 21 Aug 2017 15:02:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/21/updated-gas-library-onedriveapp/</guid>
      <description>&lt;p&gt;OnedriveApp was updated to v1.0.2.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp#authprocess&#34;&gt;Moved the instance of PropertiesService.getScriptProperties() to outside of this library. When there is the PropertiesService.getScriptProperties() inside the library, it was found that the parameters that users set was saved to the library. So this was modified. I&amp;rsquo;m sorry that I couldn&amp;rsquo;t notice this situation.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;GitHub of OnedriveApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2017/08/21/updated-gas-library-onedriveapp/</link>
      <pubDate>Mon, 21 Aug 2017 11:22:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/21/updated-gas-library-onedriveapp/</guid>
      <description>&lt;p&gt;OnedriveApp was updated to v1.0.1.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp#authprocess&#34;&gt;Added a method for retrieving access token and refresh token using this library.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By added this method, OneDrive APIs can be used by only this library.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;GitHub of OnedriveApp&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changing Values by Checking Duplicated Values of JSON for Javascript</title>
      <link>https://tanaikech.github.io/2017/08/21/changing-values-by-checking-duplicated-values-of-json-for-javascript/</link>
      <pubDate>Mon, 21 Aug 2017 08:30:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/21/changing-values-by-checking-duplicated-values-of-json-for-javascript/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/4c659fbb7cf8df0bc2c063dafa10e36c&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for changing values by checking duplicated values of JSON for Javascript.&lt;/p&gt;&#xA;&lt;p&gt;Please see the following script. There is an array with a JSON data with 3 keys and 3 values. It is found that the values for each element duplicate. These duplicated values are changing by adding numbers.&lt;/p&gt;&#xA;&lt;p&gt;I use this for managing filenames. This script also can be used for Google Apps Script. If this was useful for you, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ImgApp</title>
      <link>https://tanaikech.github.io/2017/08/20/updated-gas-library-imgapp/</link>
      <pubDate>Sun, 20 Aug 2017 15:11:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/20/updated-gas-library-imgapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;ImgApp&lt;/a&gt; was updated to v1.2.0. New method was added.&lt;/p&gt;&#xA;&lt;h2 id=&#34;3-updatethumbnail&#34;&gt;3. updateThumbnail()&lt;/h2&gt;&#xA;&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;&#xA;&lt;p&gt;This method is for updating thumbnail of files on Google Drive using images you selected.&lt;/p&gt;&#xA;&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;&#xA;&lt;p&gt;For example, zip files don&amp;rsquo;t have the thumbnail on Google Drive. An icon is shown as the thumbnail. For the most files, Google Drive can create automatically each thumbnail. But there are sometimes files which cannot be created the thumbnail. Zip file is also one of them. In order to add and update thumbnails to such files, I added this method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updating Thumbnail of File on Google Drive using Python</title>
      <link>https://tanaikech.github.io/2017/08/19/updating-thumbnail-of-file-on-google-drive-using-python/</link>
      <pubDate>Sat, 19 Aug 2017 16:27:17 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/19/updating-thumbnail-of-file-on-google-drive-using-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/731c412c271828276bf3e24a25235aab&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for updating thumbnail of file on Google Drive using Python.&lt;/p&gt;&#xA;&lt;p&gt;This sample supposes that &lt;a href=&#34;https://developers.google.com/drive/v3/web/quickstart/python&#34;&gt;quickstart&lt;/a&gt; is used and default quickstart works fine. In order to use this sample, please carry out as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Replace &lt;code&gt;main()&lt;/code&gt; of the default quickstart to this sample.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;script-&#34;&gt;Script :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; base64 &lt;span style=&#34;color:#75715e&#34;&gt;# This is used for this sample.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    credentials &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; get_credentials()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    http &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; credentials&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;authorize(httplib2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Http())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    service &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; discovery&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;build(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;drive&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;v3&amp;#39;&lt;/span&gt;, http&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./sample.png&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; f:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; service&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;files()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;update(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            fileId&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### file ID ###&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            body&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;contentHints&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;thumbnail&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;image&amp;#34;&lt;/span&gt;: base64&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;urlsafe_b64encode(f&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read())&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;decode(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;utf8&amp;#39;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mimeType&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;image/png&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        )&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;execute()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(res)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;contentHints.thumbnail.image&lt;/code&gt; is URL-safe Base64-encoded image. So an image data that you want to use as new thumbnail has to be converted to URL-safe Base64-encoded data. For this, it uses &lt;code&gt;base64.urlsafe_b64encode()&lt;/code&gt; at Python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Downloading Files Under Specific Folder using Node.js</title>
      <link>https://tanaikech.github.io/2017/08/17/downloading-files-under-specific-folder-using-node.js/</link>
      <pubDate>Thu, 17 Aug 2017 09:25:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/17/downloading-files-under-specific-folder-using-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/38b536923b1765da052c21aab093649d&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for downloading files under a specific folder using Node.js. It can download files with Google Docs and others.&lt;/p&gt;&#xA;&lt;p&gt;This sample supposes as follows. So please confirm it.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/drive/v3/web/quickstart/nodejs&#34;&gt;quickstart&lt;/a&gt; is used and default quickstart works fine.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In order to use this sample, please carry out as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Replace &lt;code&gt;listFiles()&lt;/code&gt; of the default quickstart to this sample.&lt;/li&gt;&#xA;&lt;li&gt;Set &lt;code&gt;folderid&lt;/code&gt;. This script can retrieve files in the folder with &lt;code&gt;folderid&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Delete &lt;code&gt;drive-nodejs-quickstart.json&lt;/code&gt;. I think that there is the file at &lt;code&gt;.credentials&lt;/code&gt; in your home directory.&lt;/li&gt;&#xA;&lt;li&gt;Change the SCOPE from &lt;code&gt;var SCOPES = [&#39;https://www.googleapis.com/auth/drive.metadata.readonly&#39;];&lt;/code&gt; to &lt;code&gt;var SCOPES = [&#39;https://www.googleapis.com/auth/drive.readonly&#39;];&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Run script, retrieve the code and authorize.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;script-&#34;&gt;Script :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;listFiles&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderid&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### folder ID ###&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Folder ID. This script downloads files in the folder with this folder ID.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;outputExtension&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pdf&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Extension of output file. This is adapted to only Google Docs.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;outputMimeType&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mime&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;lookup&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;outputExtension&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;google&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;drive&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;v3&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderid&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39; in parents and trashed=false&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fields&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;files(id, name, mimeType)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;The API returned an error: &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps&amp;#34;&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dlfile&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createWriteStream&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;outputExtension&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;export&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;outputMimeType&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }).&lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;end&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;%s&amp;#39; was downloaded as %s.&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;outputExtension&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }).&lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;process&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }).&lt;span style=&#34;color:#a6e22e&#34;&gt;pipe&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;dlfile&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dlfile&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createWriteStream&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;fileId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;alt&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;media&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }).&lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;end&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;%s&amp;#39; was downloaded as %s.&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mime&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;extension&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mimeType&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }).&lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;process&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }).&lt;span style=&#34;color:#a6e22e&#34;&gt;pipe&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;dlfile&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>GAS Library - OnedriveApp</title>
      <link>https://tanaikech.github.io/2017/08/16/gas-library-onedriveapp/</link>
      <pubDate>Wed, 16 Aug 2017 10:31:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/16/gas-library-onedriveapp/</guid>
      <description>&lt;p&gt;This is a library of Google Apps Script for using Microsoft OneDrive.&lt;/p&gt;&#xA;&lt;h2 id=&#34;feature&#34;&gt;Feature&lt;/h2&gt;&#xA;&lt;p&gt;This library can carry out following functions using OneDrive APIs.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Retrieve file list on OneDrive.&lt;/li&gt;&#xA;&lt;li&gt;Delete files and folders on OneDrive.&lt;/li&gt;&#xA;&lt;li&gt;Create folder on OneDrive.&lt;/li&gt;&#xA;&lt;li&gt;Download files from OneDrive to Google Drive.&lt;/li&gt;&#xA;&lt;li&gt;Upload files from Google Drive to OneDrive.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/tanaikech/OnedriveApp/raw/master/images/demo.gif&#34;&#xA;     alt=&#34;GAS Library - OnedriveApp&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can see the detail information here &lt;a href=&#34;https://github.com/tanaikech/OnedriveApp&#34;&gt;https://github.com/tanaikech/OnedriveApp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uploading Files to OneDrive Using Node.js</title>
      <link>https://tanaikech.github.io/2017/08/15/uploading-files-to-onedrive-using-node.js/</link>
      <pubDate>Tue, 15 Aug 2017 10:00:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/15/uploading-files-to-onedrive-using-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/22bfb05e61f0afb8beed29dd668bdce9&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;upload-contents-for-an-item-on-onedrive&#34;&gt;&lt;a href=&#34;https://dev.onedrive.com/items/upload.htm&#34;&gt;Upload contents for an item on OneDrive&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;In order to use this script, please retrieve client id, client secret and refresh token before. About this, you can see the detail information at &lt;a href=&#34;https://gist.github.com/tanaikech/d9674f0ead7e3320c5e3184f5d1b05cc&#34;&gt;https://gist.github.com/tanaikech/d9674f0ead7e3320c5e3184f5d1b05cc&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-simple-item-upload&#34;&gt;1. Simple item upload&lt;/h2&gt;&#xA;&lt;p&gt;This is for the simple item upload is available for items with less than 4 MB of content. The detail information is &lt;a href=&#34;https://dev.onedrive.com/items/upload_put.htm&#34;&gt;https://dev.onedrive.com/items/upload_put.htm&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;fs&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mime&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;request&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;./sample.zip&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Filename you want to upload on your local PC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onedrive_folder&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;SampleFolder&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Folder name on OneDrive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onedrive_filename&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sample.zip&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Filename on OneDrive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;post&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://login.microsoftonline.com/common/oauth2/v2.0/token&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;redirect_uri&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;http://localhost/dashboard&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;client_id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onedrive_client_id&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;client_secret&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onedrive_client_secret&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;refresh_token&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onedrive_refresh_token&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;grant_type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;refresh_token&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;readFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;read&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;request&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;put&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://graph.microsoft.com/v1.0/drive/root:/&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onedrive_folder&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;onedrive_filename&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:/content&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Authorization&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bearer &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;access_token&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mime&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getType&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;), &lt;span style=&#34;color:#75715e&#34;&gt;// When you use old version, please modify this to &amp;#34;mime.lookup(file)&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;er&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;re&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;bo&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bo&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2-resumable-item-upload&#34;&gt;2. Resumable item upload&lt;/h2&gt;&#xA;&lt;p&gt;This is for the resumable item upload is provided for large files or when a resumable transfer may be necessary.&#xA;The detail information is &lt;a href=&#34;https://dev.onedrive.com/items/upload_large_files.htm&#34;&gt;https://dev.onedrive.com/items/upload_large_files.htm&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Netatmo API Had Been Down 3</title>
      <link>https://tanaikech.github.io/2017/08/12/netatmo-api-had-been-down-3/</link>
      <pubDate>Sat, 12 Aug 2017 17:38:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/12/netatmo-api-had-been-down-3/</guid>
      <description>&lt;h2 id=&#34;report&#34;&gt;Report&lt;/h2&gt;&#xA;&lt;p&gt;Netatmo API had been down from Aug. 10, 2017 19:30 JST to Aug. 11, 2017 19:00 JST. Now it&amp;rsquo;s working.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interconversion Between Google Docs and Microsoft Docs</title>
      <link>https://tanaikech.github.io/2017/08/11/interconversion-between-google-docs-and-microsoft-docs/</link>
      <pubDate>Fri, 11 Aug 2017 15:02:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/11/interconversion-between-google-docs-and-microsoft-docs/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8d639542577a594f6104b7f6fb753064&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updated: January 22, 2023&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample script is for the interconversion between Google Docs (document, spreadsheet and presentation) and Microsoft Docs (word, excel and powerpoint). The feature is to convert them without &lt;a href=&#34;https://developers.google.com/apps-script/guides/services/advanced&#34;&gt;Advanced Google Services&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Since Advanced Google Services is not used for this, if you publish your script with this script, you are not necessary to explain how to install Advanced Google Services. This script converts between Google Docs and Microsoft Docs using &lt;code&gt;UrlFetchApp.fetch()&lt;/code&gt;. &lt;strong&gt;Although Drive API v3 is used, Drive API is automatically enabled by the recent update on Google.&lt;/strong&gt; &lt;a href=&#34;http://qiita.com/tanaike/items/1d49f73ab05403d0fe4c&#34;&gt;Ref (I&amp;rsquo;m sorry. This is Japanese language.)&lt;/a&gt; So you are not necessary to explain about the use of Drive API. By this, users will be easy to use the scripts that Drive API is used. This is very important for a lot of users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Netatmo API Had Been Down 2</title>
      <link>https://tanaikech.github.io/2017/08/10/netatmo-api-had-been-down-2/</link>
      <pubDate>Thu, 10 Aug 2017 07:10:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/10/netatmo-api-had-been-down-2/</guid>
      <description>&lt;h2 id=&#34;report&#34;&gt;Report&lt;/h2&gt;&#xA;&lt;p&gt;Netatmo API had been down from Aug. 8, 2017 21:30 JST to Aug. 9, 2017 17:30 JST. Now it&amp;rsquo;s working.&lt;/p&gt;&#xA;&lt;p&gt;I got an e-mail from Netatmo. They say that the issue was solved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Netatmo API Had Been Down 1</title>
      <link>https://tanaikech.github.io/2017/08/07/netatmo-api-had-been-down-1/</link>
      <pubDate>Mon, 07 Aug 2017 09:03:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/07/netatmo-api-had-been-down-1/</guid>
      <description>&lt;h2 id=&#34;report&#34;&gt;Report&lt;/h2&gt;&#xA;&lt;p&gt;Netatmo API had been down from Aug. 7, 2017 00:00 a.m. JST to Aug. 7, 2017 07:30 a.m. JST. Now it&amp;rsquo;s working.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Downloading Shared Files on Google Drive Using Curl</title>
      <link>https://tanaikech.github.io/2017/08/05/downloading-shared-files-on-google-drive-using-curl/</link>
      <pubDate>Sat, 05 Aug 2017 11:06:03 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/05/downloading-shared-files-on-google-drive-using-curl/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/f0f2d122e05bf5f971611258c22c110f&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When the shared files on Google Drive is downloaded, it is necessary to change the download method by the file size. The boundary of file size when the method is changed is about &lt;strong&gt;40MB&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;file-size--40mb&#34;&gt;File size &amp;lt; 40MB&lt;/h3&gt;&#xA;&lt;h4 id=&#34;curl&#34;&gt;CURL&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;filename&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### filename ###&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fileid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### file ID ###&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -L -o &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;filename&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://drive.google.com/uc?export=download&amp;amp;id=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;fileid&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;file-size--40mb-1&#34;&gt;File size &amp;gt; 40MB&lt;/h3&gt;&#xA;&lt;p&gt;When it tries to download the file with more than 40MB, Google says to download from following URL.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Access Token From OneDrive using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/08/04/retrieving-access-token-from-onedrive-using-google-apps-script/</link>
      <pubDate>Fri, 04 Aug 2017 14:21:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/08/04/retrieving-access-token-from-onedrive-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d9674f0ead7e3320c5e3184f5d1b05cc&#34;&gt;Gist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This GAS sample is for retrieving access token to use OneDrive APIs using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In this script, the authorization code is automatically retrieved.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20170804a_demo.gif&#34;&#xA;     alt=&#34;Retrieving Access Token From OneDrive using Google Apps Script&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;In order to use this, both accounts of Google and OneDrive (MSN) are required.&lt;/p&gt;&#xA;&lt;h3 id=&#34;google-side&#34;&gt;Google side&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Copy and paste the sample script to your script editor. You can use the standalone script for this.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/apps-script/guides/web&#34;&gt;Deploy Web Apps&lt;/a&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On the Script Editor&#xA;&lt;ul&gt;&#xA;&lt;li&gt;File&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Manage Versions&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Save New Version&lt;/li&gt;&#xA;&lt;li&gt;Publish&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Deploy as Web App&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; At Execute the app as, select &lt;strong&gt;&amp;ldquo;your account&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; At Who has access to the app, select &lt;strong&gt;&amp;ldquo;Only myself&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Click &amp;ldquo;Deploy&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Copy URL of &lt;strong&gt;&amp;ldquo;latest code&amp;rdquo;&lt;/strong&gt; (This is important!)&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Click &amp;ldquo;OK&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;URL of &lt;strong&gt;&amp;ldquo;latest code&amp;rdquo;&lt;/strong&gt; is &lt;code&gt;https://script.google.com/macros/s/###/dev&lt;/code&gt;. So please modify this URL. Replace from &amp;ldquo;dev&amp;rdquo; to &amp;ldquo;usercallback&amp;rdquo; for the URL. And copy this modified URL.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;From : &lt;code&gt;https://script.google.com/macros/s/###/dev&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;To : &lt;code&gt;https://script.google.com/macros/s/###/usercallback&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;onedrive-side&#34;&gt;OneDrive side&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Log in to &lt;a href=&#34;https://portal.azure.com/&#34;&gt;Microsoft Azure portal&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Search &amp;ldquo;Azure Active Directory&amp;rdquo; at the top of text input box. And open &amp;ldquo;Azure Active Directory&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;Click &amp;ldquo;App registrations&amp;rdquo; at the left side bar.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In my environment, when I used Chrome as the browser, no response occurred. So in that case, I used Microsoft Edge.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Click &amp;ldquo;New registration&amp;rdquo;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;app name: &amp;ldquo;sample app name&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Supported account types: &amp;ldquo;Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Redirect URI (optional): Web&#xA;&lt;ul&gt;&#xA;&lt;li&gt;URL: &lt;code&gt;https://script.google.com/macros/s/###/usercallback&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Click &amp;ldquo;Register&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Copy &lt;strong&gt;&amp;ldquo;Application (client) ID&amp;rdquo;&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Click &amp;ldquo;Certificates &amp;amp; secrets&amp;rdquo; at the left side bar.&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Click &amp;ldquo;New client secrets&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;After input the description and select &amp;ldquo;expire&amp;rdquo;, click &amp;ldquo;Add&amp;rdquo; button.&lt;/li&gt;&#xA;&lt;li&gt;Copy &lt;strong&gt;the created secret value&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;By above operation, the preparation is done.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting a1Notation to GridRange for Google Sheets API</title>
      <link>https://tanaikech.github.io/2017/07/31/converting-a1notation-to-gridrange-for-google-sheets-api/</link>
      <pubDate>Mon, 31 Jul 2017 14:38:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/31/converting-a1notation-to-gridrange-for-google-sheets-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/95c7cd650837f33a564babcaf013cae0&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When it uses Google Sheets API v4, &lt;a href=&#34;https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets#gridrange&#34;&gt;GridRange&lt;/a&gt; is used for it as the range property. These sample scripts are for converting from a1Notation to GridRange. You can chose from following 2 scripts. Both scripts can retrieve the same result.&lt;/p&gt;&#xA;&lt;h3 id=&#34;script-1-&#34;&gt;Script 1 :&lt;/h3&gt;&#xA;&lt;p&gt;This is from me.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1notation2gridrange1&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetid&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;a1notation&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a1notation&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/(^.+)!(.+):(.+$)/&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;openById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sheetid&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetByName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gridRange&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sheetId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getSheetId&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;startRowIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRow&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;endRowIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRow&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getNumRows&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;startColumnIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getColumn&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;endColumnIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getColumn&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getNumColumns&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/[0-9]/&lt;/span&gt;)) &lt;span style=&#34;color:#66d9ef&#34;&gt;delete&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gridRange&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;startRowIndex&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/[0-9]/&lt;/span&gt;)) &lt;span style=&#34;color:#66d9ef&#34;&gt;delete&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gridRange&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;endRowIndex&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gridRange&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;script-2-&#34;&gt;Script 2 :&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;String.prototype.to10&lt;/code&gt; was used for this script. &lt;code&gt;String.prototype.to10&lt;/code&gt; is from &lt;a href=&#34;https://gist.github.com/oshliaer/647d574208da5f3529a3&#34;&gt;Alexander Ivanov&lt;/a&gt;. I think that &lt;code&gt;String.prototype.to10&lt;/code&gt; is a clever solution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multipart-POST Request Using Node.js</title>
      <link>https://tanaikech.github.io/2017/07/27/multipart-post-request-using-node.js/</link>
      <pubDate>Thu, 27 Jul 2017 09:44:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/27/multipart-post-request-using-node.js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/40c9284e91d209356395b43022ffc5cc&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here, I introduce 2 scripts for uploading files to Slack using Node.js as samples. These 2 sample scripts are for uploading files to Slack.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sample-script-1&#34;&gt;Sample script 1:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can upload the zip file by converting byte array as follows.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At first, it builds &lt;code&gt;form-data&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Adds the zip file converted to byte array and &lt;code&gt;boundary&lt;/code&gt; using &lt;code&gt;Buffer.concat()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;This is used as body in request.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://tanaikech.github.io/2017/07/21/multipart-post-request-using-google-apps-script/&#34;&gt;Basically, this is almost the same to the method using GAS&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multipart-POST Request Using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/07/21/multipart-post-request-using-google-apps-script/</link>
      <pubDate>Fri, 21 Jul 2017 10:34:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/21/multipart-post-request-using-google-apps-script/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d595d30a592979bbf0c692d1193d260c&#34;&gt;Gist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These sample scripts are for requesting multipart post using Google Apps Script.&lt;/p&gt;&#xA;&lt;p&gt;In most cases, the multipart request is used for uploading files. So I prepared 2 sample situations as follows. For each situation, the request parameters are different.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Upload a file from Google Drive to Slack.&lt;/li&gt;&#xA;&lt;li&gt;Convert an excel file to Spreadsheet on Google Drive using Drive API v3.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Multipart post is required for these situations.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-uploading-files-from-google-drive-to-slack&#34;&gt;1. Uploading Files From Google Drive To Slack&lt;/h2&gt;&#xA;&lt;h3 id=&#34;curl-code&#34;&gt;Curl Code&lt;/h3&gt;&#xA;&lt;p&gt;In order to use this sample, please retrieve access token for uploading file to Slack.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Images on Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/07/21/retrieving-images-on-spreadsheet/</link>
      <pubDate>Fri, 21 Jul 2017 08:27:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/21/retrieving-images-on-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/d6594dc5c6c49a015c7d408c90e58bdc&#34;&gt;Gist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for retrieving images on Spreadsheet.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, there are no methods for retrieving directly images on spreadsheet using GAS. So I use the method which retrieves URL from &lt;code&gt;=image(URL)&lt;/code&gt; and retrieves the image from the URL.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;In this case, &lt;code&gt;=image(URL)&lt;/code&gt; has to be in the cell. Images embedded by &lt;code&gt;insertImage()&lt;/code&gt; cannot be retrieved.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;At first, please confirm them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-&#34;&gt;Sample script :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cell&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Cell address with the function of &amp;#34;=image()&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;samplename&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// Output filename&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cell&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;getFormula&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/\&amp;#34;(.+)\&amp;#34;/&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;flow-&#34;&gt;Flow :&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Retrieve &lt;code&gt;=image(URL)&lt;/code&gt; using &lt;code&gt;getFormula()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Retrieve URL from &lt;code&gt;=image(URL)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Retrieve file blob using &lt;code&gt;UrlFetchApp.fetch()&lt;/code&gt; from the URL.&lt;/li&gt;&#xA;&lt;li&gt;Output the file blob as a file.&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Retrieving Array Coordinates of Duplicated Elements</title>
      <link>https://tanaikech.github.io/2017/07/19/retrieving-array-coordinates-of-duplicated-elements/</link>
      <pubDate>Wed, 19 Jul 2017 10:38:26 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/19/retrieving-array-coordinates-of-duplicated-elements/</guid>
      <description>&lt;p&gt;This sample is for retrieving array coordinates of duplicated elements.&lt;/p&gt;&#xA;&lt;h3 id=&#34;script-&#34;&gt;Script :&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;inputdata&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;f&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;g&amp;#34;&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dic&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;inputdata&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;dic&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Duplicated&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;dic&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;temp&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Duplicated&amp;#39;&lt;/span&gt;)])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;result-&#34;&gt;Result :&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Duplicated&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Duplicated&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Duplicated&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Get File List Under a Folder on Google Drive</title>
      <link>https://tanaikech.github.io/2017/07/19/get-file-list-under-a-folder-on-google-drive/</link>
      <pubDate>Wed, 19 Jul 2017 08:51:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/19/get-file-list-under-a-folder-on-google-drive/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/8e9b6fd667efcb483c9c742da9cd4e19&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample of Google Apps Script. This script is for retrieving all files and folders under a folder on Google Drive. All files and folders in the specific folder can be retrieved.&lt;/p&gt;&#xA;&lt;p&gt;If you want to retrieve file list with all files and folders on Google Drive, please use &lt;code&gt;DriveApp.getRootFolder().getId()&lt;/code&gt; as &lt;code&gt;folderId&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When there are a lot of files in the folder, it may be over the limitation time to execute script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v122</title>
      <link>https://tanaikech.github.io/2017/07/12/updated-ggsrun-to-v122/</link>
      <pubDate>Wed, 12 Jul 2017 14:31:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/12/updated-ggsrun-to-v122/</guid>
      <description>&lt;h3 id=&#34;ggsrun-was-updated-to-v122&#34;&gt;ggsrun was updated to v.1.2.2&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For Google Docs (spreadsheet, document, slide and drawing), since I noticed that the revision files would not be able to be retrieved using Drive API v3, I modified this using new workaround.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The new workaround is to use Drive API v2. &lt;code&gt;drive.revisions.get&lt;/code&gt; of Drive API v2 can retrieve not only the revision list, but also the export links. I thought of the use of the export links. This became the new workaround.&lt;/li&gt;&#xA;&lt;li&gt;For the files except for Google Docs, the revision files can be retrieved using Drive API v3.&lt;/li&gt;&#xA;&lt;li&gt;The usage is &lt;a href=&#34;https://github.com/tanaikech/ggsrun#RevisionFile&#34;&gt;here&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t know when this workaround will not be able to be used. But if this could not be used, I would like to investigate of other method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>(NEW) Retrieve old revision file from Google Drive</title>
      <link>https://tanaikech.github.io/2017/07/12/new-retrieve-old-revision-file-from-google-drive/</link>
      <pubDate>Wed, 12 Jul 2017 13:21:07 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/12/new-retrieve-old-revision-file-from-google-drive/</guid>
      <description>&lt;p&gt;This method was updated at July 12, 2017.&lt;/p&gt;&#xA;&lt;p&gt;In order to use this, at first, please retrieve your access token and enable Drive API.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-file-id&#34;&gt;1. File ID&lt;/h3&gt;&#xA;&lt;p&gt;Retrieve file id from file name.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X GET -sSL &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Authorization: Bearer ### Access token ###&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.googleapis.com/drive/v3/files?q=name=&amp;#34;### FileName ###&amp;#34;&amp;amp;fields=files(id,name)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Reference : &lt;a href=&#34;https://developers.google.com/drive/v3/reference/files/list&#34;&gt;https://developers.google.com/drive/v3/reference/files/list&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-revision-id&#34;&gt;2. Revision ID&lt;/h3&gt;&#xA;&lt;p&gt;Retrieve revision id from file id.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X GET -sSL &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Authorization: Bearer ### Access token ###&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.googleapis.com/drive/v3/files/### FileID ###/revisions?fields=revisions(id%2CmodifiedTime)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Reference : &lt;a href=&#34;https://developers.google.com/drive/v3/reference/revisions/list&#34;&gt;https://developers.google.com/drive/v3/reference/revisions/list&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pseudo Browser with Google Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/07/05/pseudo-browser-with-google-spreadsheet/</link>
      <pubDate>Wed, 05 Jul 2017 16:45:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/05/pseudo-browser-with-google-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/a290509e3d3f6997d248b88763fc69b9&#34;&gt;Gist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample script for creating the pseudo browser using Google Spreadsheet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;I unexpectedly noticed this. I think that this is for off-line browsing using HTML data. So there are many limitations. At first, please confirm them.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Limitations&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It cannot move from opened site to other outside site. If the outer site is opened as a new wind, your own browser is opened and move there.&lt;/li&gt;&#xA;&lt;li&gt;For URL, it can move directories which is one low. But it cannot move directories more than two deeper.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Because it retrieves the HTML data from the inputted URL using &lt;code&gt;UrlFetchApp&lt;/code&gt;. It cannot move to the out side of data retrieved by &lt;code&gt;UrlFetchApp&lt;/code&gt;.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The access to the site opened by inputting URL is run at Google side.&lt;/li&gt;&#xA;&lt;li&gt;Javascript on the opened site is run at your local PC side.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;User-Agent&lt;/code&gt; cannot be changed from &lt;code&gt;Mozilla/5.0 (compatible; Google-Apps-Script)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What I thought the interesting is that the appearance of the site has been maintained at this pseudo browser. And, by using this, the sites which are slow speed at your environment might be able to be opened smoothly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Downloading Files From Google Drive Under No Authorization Using Browser</title>
      <link>https://tanaikech.github.io/2017/07/04/downloading-files-from-google-drive-under-no-authorization-using-browser/</link>
      <pubDate>Tue, 04 Jul 2017 15:57:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/07/04/downloading-files-from-google-drive-under-no-authorization-using-browser/</guid>
      <description>&lt;p&gt;&lt;a name=&#34;TOP&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/c5b2811bce01cbcc26ffa357df496379&#34;&gt;Gist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a sample script for downloading files from Google Drive under no authorization using browser. By using this sample, you can make other users download files from your Google Drive. Even if the other users are not Google users, they can download the files.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;demo&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20170704-demo_simple.gif&#34;&#xA;     alt=&#34;Downloading Files From Google Drive Under No Authorization Using Browser&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This is a demonstration for downloading files from Google Drive under no authorization using browser. From the top document, You can see that an user who is not owner of Google Drive is downloading files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: CLI Tool - gislack</title>
      <link>https://tanaikech.github.io/2017/06/30/updated-cli-tool-gislack/</link>
      <pubDate>Fri, 30 Jun 2017 11:40:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/30/updated-cli-tool-gislack/</guid>
      <description>&lt;p&gt;gislack is a CLI tool to submit files to both Gist and Slack.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;v1.0.1 (June 30, 2017)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some modifications related to error handling.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Please check it out. &lt;a href=&#34;https://github.com/tanaikech/gislack&#34;&gt;https://github.com/tanaikech/gislack&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - ImgApp</title>
      <link>https://tanaikech.github.io/2017/06/29/updated-gas-library-imgapp/</link>
      <pubDate>Thu, 29 Jun 2017 16:09:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/29/updated-gas-library-imgapp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ImgApp&#34;&gt;ImgApp&lt;/a&gt; was updated to v1.1.0. New method was added.&lt;/p&gt;&#xA;&lt;h2 id=&#34;2-doresize&#34;&gt;2. doResize()&lt;/h2&gt;&#xA;&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;&#xA;&lt;p&gt;This method is for resizing images.&lt;/p&gt;&#xA;&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;&#xA;&lt;p&gt;Unfortunately, there are no methods to resize images at Google Apps Script. As a workaround, there is a method that it imports the image in Google Document and resizes the image using &lt;code&gt;setWidth()&lt;/code&gt; and &lt;code&gt;setHeight()&lt;/code&gt;. But in this method, the resized blob cannot be retrieved. So although I had thought of other workaround, I had not been able to find it. Recently, I accidentally discovered the other workaround &lt;code&gt;doResize()&lt;/code&gt;. Since it was found that this workaround can be surely used, I added this to ImgApp.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - ImgApp - getSize()</title>
      <link>https://tanaikech.github.io/2017/06/27/gas-library-imgapp-getsize/</link>
      <pubDate>Tue, 27 Jun 2017 16:21:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/27/gas-library-imgapp-getsize/</guid>
      <description>&lt;h2 id=&#34;1-getsize&#34;&gt;1. getSize()&lt;/h2&gt;&#xA;&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;&#xA;&lt;p&gt;This method is for retrieving the width and height of image as the unit of pixel.&lt;/p&gt;&#xA;&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;&#xA;&lt;p&gt;Unfortunately, there are no methods to directly retrieve the image size at Google Apps Script. As a workaround, there is a method that it imports the image in Google Document and retrieves the size using &lt;code&gt;getWidth()&lt;/code&gt; and &lt;code&gt;getHeight()&lt;/code&gt;. But in this method, it uses much time and resources on Google. So I thought of retrieving the information of image at the binary level, and created this. By this, the low process cost could be achieved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sublime Text Plugin - gislacks</title>
      <link>https://tanaikech.github.io/2017/06/22/sublime-text-plugin-gislacks/</link>
      <pubDate>Thu, 22 Jun 2017 13:33:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/22/sublime-text-plugin-gislacks/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a plugin of Sublime Text 3 for submitting files to both Gist and Slack.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;I like to use Sublime Text for developing scripts. And when I discuss about developing scripts, I often use Slack. When I submitted a script to Slack, I had saved the script to Gist as a backup. I had done manually this on my browser. Namely, I wanted to be saving the revision of script while I&amp;rsquo;m discussing about the script at Slack. One day, I wished this process had been able to be automatically run. So I created this plugin and &lt;a href=&#34;https://github.com/tanaikech/gislack/&#34;&gt;gislack of a CLI tool&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CLI Tool - gislack</title>
      <link>https://tanaikech.github.io/2017/06/22/cli-tool-gislack/</link>
      <pubDate>Thu, 22 Jun 2017 12:59:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/22/cli-tool-gislack/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;This is a CLI tool to submit files to both Gist and Slack.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When I discuss about developing scripts, I often use Slack. When I submitted a script to Slack, I had saved the script to Gist as a backup. I had done manually this on my browser. Namely, I wanted to be saving the revision of script while I&amp;rsquo;m discussing about the script at Slack. Recently, I wished this process had been able to be automatically run. So I created this tool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Library - getcode</title>
      <link>https://tanaikech.github.io/2017/06/21/go-library-getcode/</link>
      <pubDate>Wed, 21 Jun 2017 14:17:39 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/21/go-library-getcode/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This is a Golang library to automatically get an authorization code for retrieving access token using OAuth2.&lt;/p&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;When it retrieves an access token and refresh token using OAuth2, the code for retrieving them has to be got by authorization on own browser. In order to retrieve the code, in generally, users have to click the authorization button and copy the code on the browser. This library can be automatically got the code by launching HTML server as a redirected server. At first, I have used this for retrieving the code from Google. But recently I noticed that this can be used for other sites. They are Google, GitHub, Slack and so on. This library can be used for creating such applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Access Token for Google APIs</title>
      <link>https://tanaikech.github.io/2017/06/21/retrieving-access-token-for-google-apis/</link>
      <pubDate>Wed, 21 Jun 2017 10:24:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/21/retrieving-access-token-for-google-apis/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gist.github.com/tanaikech/247e4db66098e94f9e7da1b857f0a9be&#34;&gt;Gists&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This sample is for retrieving access token for Google APIs. I created this for studying &lt;code&gt;newStateToken()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;preparation&#34;&gt;Preparation&lt;/h2&gt;&#xA;&lt;p&gt;In order to use this sample, please do as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Deploy and launch Web Apps for retrieving redirect uri&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On the Script Editor&#xA;&lt;ul&gt;&#xA;&lt;li&gt;File&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Manage Versions&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Save New Version&lt;/li&gt;&#xA;&lt;li&gt;Publish&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Deploy as Web App&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; At Execute the app as, select &lt;strong&gt;&amp;ldquo;your account&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; At Who has access to the app, select &lt;strong&gt;&amp;ldquo;Only myself&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Click &amp;ldquo;Deploy&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Click &lt;strong&gt;&amp;ldquo;latest code&amp;rdquo;&lt;/strong&gt; (By this click, it launches the authorization process.)&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; &lt;u&gt;Please copy URL shown in the top of your browser as the redirect URI.&lt;/u&gt; And please modify the redirect URI like &lt;code&gt;https://script.google.com/macros/s/#####/usercallback&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Open console project&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On the Script Editor&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-&amp;gt; Resources&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Cloud Platform Project&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Click &amp;ldquo;Projects currently associated with this script&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Click API in start guide&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Retrieve client id and client secret&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On the Console Project&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Click authentication information at left side&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Create a valid Client ID as OAyth client ID&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Choose &lt;strong&gt;Web Application&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; Input Name (This is a name you want.)&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; &lt;strong&gt;Input redirect URI that you have already copied&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; done&lt;/li&gt;&#xA;&lt;li&gt;-&amp;gt; &lt;u&gt;Please copy client ID and client Secret in a pop-up window.&lt;/u&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Here, you have client ID, client Secret and redirect URI to retrieving refresh token and access token. These can be used for following sample script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: GAS Library - SOUWA</title>
      <link>https://tanaikech.github.io/2017/06/19/updated-gas-library-souwa/</link>
      <pubDate>Mon, 19 Jun 2017 07:06:45 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/19/updated-gas-library-souwa/</guid>
      <description>&lt;p&gt;SOUWA means summing in Japanese. SOUWA can sum string elements in an array at the high speed. The speed of SOUWA with &lt;strong&gt;the pyramid algorithm is about 380 times faster than that of the standard method&lt;/strong&gt;. New algorithm for summing array elements was developed for SOUWA. You can see the detailed report of this library at here. If you are interested in this, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;p&gt;It was updated to v1.0.2. Please check it out. &lt;a href=&#34;https://github.com/tanaikech/SOUWA_GAS&#34;&gt;https://github.com/tanaikech/SOUWA_GAS&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benchmark: Retrieving Values from Deep Nested JSON at Golang</title>
      <link>https://tanaikech.github.io/2017/06/17/benchmark-retrieving-values-from-deep-nested-json-at-golang/</link>
      <pubDate>Sat, 17 Jun 2017 10:06:24 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/17/benchmark-retrieving-values-from-deep-nested-json-at-golang/</guid>
      <description>&lt;p&gt;This sample script is for retrieving values from a deep nested JSON. There are 2 patterns. So for these, the benchmark were measured.&lt;/p&gt;&#xA;&lt;h2 id=&#34;script-&#34;&gt;Script :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;encoding/json&amp;#34;&#xA;    &amp;#34;testing&amp;#34;&#xA;)&#xA;&#xA;const (&#xA;    data = `{&#xA;      &amp;#34;A_key1&amp;#34;: {&#xA;        &amp;#34;B_key1&amp;#34;: {&#xA;          &amp;#34;C_key&amp;#34;: &amp;#34;value&amp;#34;&#xA;        }&#xA;      }&#xA;    }`&#xA;)&#xA;&#xA;func BenchmarkB1(b *testing.B) {&#xA;    b.ResetTimer()&#xA;    for i := 0; i &amp;lt; b.N; i++ {&#xA;        var p map[string]interface{}&#xA;        json.Unmarshal([]byte(data), &amp;amp;p)&#xA;        a1 := p[&amp;#34;A_key1&amp;#34;]&#xA;        a2 := p[&amp;#34;A_key1&amp;#34;].(map[string]interface{})[&amp;#34;B_key1&amp;#34;]&#xA;        a3 := p[&amp;#34;A_key1&amp;#34;].(map[string]interface{})[&amp;#34;B_key1&amp;#34;].(map[string]interface{})[&amp;#34;C_key&amp;#34;]&#xA;        _ = a1 // --&amp;gt; map[B_key1:map[C_key:value]]&#xA;        _ = a2 // --&amp;gt; map[C_key:value]&#xA;        _ = a3 // --&amp;gt; value&#xA;    }&#xA;}&#xA;&#xA;func BenchmarkB2(b *testing.B) {&#xA;    b.ResetTimer()&#xA;    for i := 0; i &amp;lt; b.N; i++ {&#xA;        var p map[string]interface{}&#xA;        json.Unmarshal([]byte(data), &amp;amp;p)&#xA;        b1 := p[&amp;#34;A_key1&amp;#34;]&#xA;        temp, _ := json.Marshal(b1)&#xA;        json.Unmarshal(temp, &amp;amp;p)&#xA;        b2 := p[&amp;#34;B_key1&amp;#34;]&#xA;        temp, _ = json.Marshal(b2)&#xA;        json.Unmarshal(temp, &amp;amp;p)&#xA;        b3 := p[&amp;#34;C_key&amp;#34;]&#xA;        _ = b1 // --&amp;gt; map[B_key1:map[C_key:value]]&#xA;        _ = b2 // --&amp;gt; map[C_key:value]&#xA;        _ = b3 // --&amp;gt; value&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;result-&#34;&gt;Result :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ go test -bench .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BenchmarkB1-4             &lt;span style=&#34;color:#ae81ff&#34;&gt;300000&lt;/span&gt;              &lt;span style=&#34;color:#ae81ff&#34;&gt;4177&lt;/span&gt; ns/op&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BenchmarkB2-4             &lt;span style=&#34;color:#ae81ff&#34;&gt;100000&lt;/span&gt;             &lt;span style=&#34;color:#ae81ff&#34;&gt;13619&lt;/span&gt; ns/op&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PASS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It was found that the process cost of &lt;code&gt;json.Unmarshal()&lt;/code&gt; was high. &lt;code&gt;json.Unmarshal()&lt;/code&gt; for test 2 is 3 times larger than that for test 1.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reopening Current File as a File with New Name at Sublime</title>
      <link>https://tanaikech.github.io/2017/06/15/reopening-current-file-as-a-file-with-new-name-at-sublime/</link>
      <pubDate>Thu, 15 Jun 2017 09:52:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/15/reopening-current-file-as-a-file-with-new-name-at-sublime/</guid>
      <description>&lt;p&gt;This is for Sublime Text. This sample is for reopening current file as a file with new file name. The current file is closed when reopening a new file.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;newfilename &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;new file name&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;contents &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;substr(sublime&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Region(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size()))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;window &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;window()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;window&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run_command(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;close_file&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; window&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;new_file()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set_name(newfilename)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;settings()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;auto_indent&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run_command(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;insert&amp;#34;&lt;/span&gt;, {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;characters&amp;#34;&lt;/span&gt;: contents})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set_scratch(&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run_command(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;prompt_save_as&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Flow of this sample&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Copy all text on current file to memory (contents).&lt;/li&gt;&#xA;&lt;li&gt;Close current file.&lt;/li&gt;&#xA;&lt;li&gt;Create new file with new file name.&lt;/li&gt;&#xA;&lt;li&gt;Paste contents to new file.&lt;/li&gt;&#xA;&lt;li&gt;Open dialog box for saving new file.&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Search Route and Embedding Map using Custom Function on Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/06/14/search-route-and-embedding-map-using-custom-function-on-spreadsheet/</link>
      <pubDate>Wed, 14 Jun 2017 17:35:47 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/14/search-route-and-embedding-map-using-custom-function-on-spreadsheet/</guid>
      <description>&lt;p&gt;This sample script is for searching route between place A and B and embedding a map by custom function on Spreadsheet.&lt;/p&gt;&#xA;&lt;p&gt;I think that this method is one of various ideas.&lt;/p&gt;&#xA;&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;&#xA;&lt;p&gt;When the map is embedded to a cell on spreadsheet as an image, the function &lt;code&gt;=IMAGE()&lt;/code&gt; is suitable for this situation. However, &lt;code&gt;Class Maps&lt;/code&gt;, &lt;code&gt;setFormula()&lt;/code&gt; for importing &lt;code&gt;=IMAGE()&lt;/code&gt; and &lt;code&gt;DriveApp.createFile()&lt;/code&gt; for creating images from maps also cannot be used for custom functions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: CLI Tool - goris</title>
      <link>https://tanaikech.github.io/2017/06/13/updated-cli-tool-goris/</link>
      <pubDate>Tue, 13 Jun 2017 10:28:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/13/updated-cli-tool-goris/</guid>
      <description>&lt;p&gt;goris is a CLI tool to search for images with Google Reverse Image Search.&lt;/p&gt;&#xA;&lt;p&gt;Today, it was updated to v1.1.0. Please check it out. &lt;a href=&#34;https://github.com/tanaikech/goris&#34;&gt;https://github.com/tanaikech/goris&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When images are matched to a searched image, web pages with matching images are retrieved. These are web pages displayed on Google top page. When this is not used, images are retrieved. This was added as a boolean option. (This was added by a request.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Giving and Retrieving Parameters for Chart at GAS</title>
      <link>https://tanaikech.github.io/2017/06/12/giving-and-retrieving-parameters-for-chart-at-gas/</link>
      <pubDate>Mon, 12 Jun 2017 11:11:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/12/giving-and-retrieving-parameters-for-chart-at-gas/</guid>
      <description>&lt;p&gt;This sample script is for retrieving parameters from a chart. The chart created by both Google Apps Script and manually operation can be used.&lt;/p&gt;&#xA;&lt;h2 id=&#34;creates-chart&#34;&gt;Creates Chart&lt;/h2&gt;&#xA;&lt;p&gt;When a chart is created, it supposes following parameters.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;parameters&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;x axis&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fontName&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Arial&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;minValue&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;maxValue&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;titleTextStyle&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;color&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#c0c0c0&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fontSize&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fontName&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Roboto&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;italic&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bold&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setOption&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hAxis&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;parameters&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;retrieve-parameters-from-chart&#34;&gt;Retrieve Parameters From Chart&lt;/h2&gt;&#xA;&lt;p&gt;For the chart created by above parameters, in order to retrieve the parameters, it uses following script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Error Handling for Subprocess at Python</title>
      <link>https://tanaikech.github.io/2017/06/09/error-handling-for-subprocess-at-python/</link>
      <pubDate>Fri, 09 Jun 2017 14:27:19 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/09/error-handling-for-subprocess-at-python/</guid>
      <description>&lt;p&gt;This sample is for error handling for subprocess.Popen. It confirms whether the execution file is existing. If the execution file is also not in the path, the error message is shown.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; subprocess&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; subprocess&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Popen(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application&amp;#34;&lt;/span&gt;,  &lt;span style=&#34;color:#75715e&#34;&gt;#  &amp;lt;- Execution file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    stdout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;subprocess&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;PIPE,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    stderr&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;subprocess&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;PIPE,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    shell&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;communicate()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; len(res[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ok: Application is existing.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: Application is not found.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Using Constructor Between Classes at Python</title>
      <link>https://tanaikech.github.io/2017/06/09/using-constructor-between-classes-at-python/</link>
      <pubDate>Fri, 09 Jun 2017 10:52:53 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/09/using-constructor-between-classes-at-python/</guid>
      <description>&lt;p&gt;This sample is for using constructor between classes at Python.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-&#34;&gt;Sample :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;test1&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;__init__&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;msg &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sample text&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;test2&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;__init__&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;msg &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; test1()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(test2()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;msg)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; sample text&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Slice Created by Split at Golang</title>
      <link>https://tanaikech.github.io/2017/06/09/slice-created-by-split-at-golang/</link>
      <pubDate>Fri, 09 Jun 2017 09:16:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/09/slice-created-by-split-at-golang/</guid>
      <description>&lt;p&gt;When a string without no strings is split by &lt;code&gt;strings.Split()&lt;/code&gt;, the created slice is the same to the slice created by &lt;code&gt;make()&lt;/code&gt;. The length of the slice doesn&amp;rsquo;t become zero.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sample-script-&#34;&gt;Sample script :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;fmt&amp;#34;&#xA;    &amp;#34;strings&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;    sample1a := strings.Split(&amp;#34;&amp;#34;, &amp;#34; &amp;#34;)&#xA;    fmt.Printf(&amp;#34;%v, %v, &amp;#39;%v&amp;#39;, %v, %+q\n&amp;#34;, sample1a, len(sample1a), sample1a[0], len(sample1a[0]), sample1a[0])&#xA;&#xA;    sample1b := make([]string, 1)&#xA;    fmt.Printf(&amp;#34;%v, %v, &amp;#39;%v&amp;#39;, %v, %+q\n&amp;#34;, sample1b, len(sample1b), sample1b[0], len(sample1b[0]), sample1b[0])&#xA;&#xA;    var sample2a []string&#xA;    fmt.Printf(&amp;#34;%v, %v\n&amp;#34;, sample2a, len(sample2a))&#xA;&#xA;    sample2b := []string{}&#xA;    fmt.Printf(&amp;#34;%v, %v\n&amp;#34;, sample2b, len(sample2b))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;result-&#34;&gt;Result :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;strings.Split() : [], 1, &amp;#39;&amp;#39;, 0, &amp;#34;&amp;#34;&#xA;make()          : [], 1, &amp;#39;&amp;#39;, 0, &amp;#34;&amp;#34;&#xA;var                : [], 0&#xA;[]string{}      : [], 0&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Benchmark: Effect of Comprehension for GAS</title>
      <link>https://tanaikech.github.io/2017/06/07/benchmark-effect-of-comprehension-for-gas/</link>
      <pubDate>Wed, 07 Jun 2017 09:21:54 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/07/benchmark-effect-of-comprehension-for-gas/</guid>
      <description>&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;There are a limit executing time for Google Apps Script (GAS). It&amp;rsquo;s 6 minutes. So users have to pay attention to the process cost of the script. GAS can use JavaScript 1.7. This means to be able to be used comprehension for GAS.&lt;/p&gt;&#xA;&lt;p&gt;In this report, the process cost for the comprehension has been investigated. The normal for loop was used as the competitor. As a result, it was found that the comprehension can be used one of methods for reducing the process cost. For 1 dimensional array, the process cost of comprehension is about &lt;strong&gt;60% lower&lt;/strong&gt; than that of the normal one. For 2 dimensional array, the process cost of comprehension is about &lt;strong&gt;50% lower&lt;/strong&gt; than that of the normal one. Each data is the average for 10 times measurements.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Embedding Animation GIF in A Cell on Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/06/06/embedding-animation-gif-in-a-cell-on-spreadsheet/</link>
      <pubDate>Tue, 06 Jun 2017 16:47:41 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/06/embedding-animation-gif-in-a-cell-on-spreadsheet/</guid>
      <description>&lt;p&gt;This sample script is for embedding animation GIF in a cell using custom function on Spreadsheet.&lt;/p&gt;&#xA;&lt;p&gt;I think that this method is one of various ideas.&lt;/p&gt;&#xA;&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;&#xA;&lt;p&gt;There are some limitations.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Images of jpeg and png can be embedded in a cell using &lt;code&gt;=IMAGE()&lt;/code&gt;. But when animation GIF is embedded using it, GIF is not played.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;insertImage()&lt;/code&gt; can insert the animation GIF to sheet. But it is not imported to one cell. It floats on several cells.&lt;/li&gt;&#xA;&lt;li&gt;In order to float the animation GIF on one cell, the size of GIF has to be retrieved. But the size of image cannot be retrieved at spreadsheet APIs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;=IMAGE()&lt;/code&gt; and &lt;code&gt;insertImage()&lt;/code&gt; cannot be used by custom functions.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;&#xA;&lt;p&gt;I thought a method to floating an animation GIF on one cell using &lt;code&gt;insertImage()&lt;/code&gt;. By this, I thought that it will be easy to use as a sheet with GIF images.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OCR using Custom Function on Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/06/06/ocr-using-custom-function-on-spreadsheet/</link>
      <pubDate>Tue, 06 Jun 2017 07:53:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/06/ocr-using-custom-function-on-spreadsheet/</guid>
      <description>&lt;p&gt;This sample script performs OCR and imports resultant text to a cell using custom function on Spreadsheet.&lt;/p&gt;&#xA;&lt;p&gt;Drive API has a function to do OCR. It was used for this sample.&lt;/p&gt;&#xA;&lt;p&gt;I think that this method is one of various ideas.&lt;/p&gt;&#xA;&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;&#xA;&lt;p&gt;When OCR is performed and imported the result to a cell on spreadsheet, there are some limitations. &lt;code&gt;DriveApp&lt;/code&gt;, &lt;code&gt;UrlFetchApp&lt;/code&gt;, &lt;code&gt;setFormula()&lt;/code&gt; cannot be used for custom functions.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;&#xA;&lt;p&gt;In order to avoid these limitations, I used &lt;a href=&#34;https://developers.google.com/apps-script/guides/web&#34;&gt;Web Apps&lt;/a&gt;. From previous research, it has been found that Web Apps can avoid various limitations. Also in the case of this situation, Web Apps could avoid the above limitations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changing File Name and Reopening Renamed File by Sublime Text</title>
      <link>https://tanaikech.github.io/2017/06/05/changing-file-name-and-reopening-renamed-file-by-sublime-text/</link>
      <pubDate>Mon, 05 Jun 2017 10:09:49 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/05/changing-file-name-and-reopening-renamed-file-by-sublime-text/</guid>
      <description>&lt;p&gt;This sample is for changing file name and reopening the file with new name. The flow is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A file (sample.py) is opened.&lt;/li&gt;&#xA;&lt;li&gt;Rename the file from sample.py to newsample.py.&lt;/li&gt;&#xA;&lt;li&gt;The opened file is replace to the file with new name.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rename(oldfilewithpath, newname)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;window()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;find_open_file(oldfilewithpath)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; view:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    view&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;retarget(newname)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Retirving All files in Folder with Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/06/04/retirving-all-files-in-folder-with-spreadsheet/</link>
      <pubDate>Sun, 04 Jun 2017 18:15:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/04/retirving-all-files-in-folder-with-spreadsheet/</guid>
      <description>&lt;p&gt;This sample retrieves all files in a folder with spreadsheet. When there are some folders in the folder with spreadsheet, this script can retrieve all files in all folders. This script has to be a container-bound script for spreadsheet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;script-&#34;&gt;Script :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getFileList&lt;/span&gt;(){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderlist&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;results&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFolders&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hasNext&lt;/span&gt;()) &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;next&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#_aabbccddee_#&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;array_folderSt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#_aabbccddee_#&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;array_folderSt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pop&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;results&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;array_folderSt&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;arguments&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;callee&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;results&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;results&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  })(&lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFolderById&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFileById&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ).&lt;span style=&#34;color:#a6e22e&#34;&gt;getParents&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;next&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ),&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;,[]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;filelist&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderlist&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderid&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderlist&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;][&lt;span style=&#34;color:#a6e22e&#34;&gt;folderlist&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFolderById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folderid&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFiles&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;foldername&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hasNext&lt;/span&gt;()){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;next&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;foldername&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;()]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;filelist&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;temp&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;concat&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;apply&lt;/span&gt;([], &lt;span style=&#34;color:#a6e22e&#34;&gt;filelist&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getFileList&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SpreadsheetApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSpreadsheet&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getActiveSheet&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ss&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRange&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;setValues&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;result-&#34;&gt;Result :&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/20170604b.png&#34;&#xA;     alt=&#34;Retirving All files in Folder with Spreadsheet&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Embedding a Map to a Cell using Custom Function on Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/06/04/embedding-a-map-to-a-cell-using-custom-function-on-spreadsheet/</link>
      <pubDate>Sun, 04 Jun 2017 12:02:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/04/embedding-a-map-to-a-cell-using-custom-function-on-spreadsheet/</guid>
      <description>&lt;p&gt;This sample script embeds a map to a cell using custom function on Spreadsheet.&lt;/p&gt;&#xA;&lt;p&gt;I think that this method is one of various ideas.&lt;/p&gt;&#xA;&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;&#xA;&lt;p&gt;When the map is embeded to a cell on spreadsheet as an image, the function &lt;code&gt;=IMAGE()&lt;/code&gt; is suitable for this situation. However, &lt;code&gt;setFormula()&lt;/code&gt; for importing &lt;code&gt;=IMAGE()&lt;/code&gt; and &lt;code&gt;DriveApp.createFile()&lt;/code&gt; for creating images from maps also cannot be used for custom functions.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;&#xA;&lt;p&gt;In order to avoid these limitations, I used &lt;a href=&#34;https://developers.google.com/apps-script/guides/web&#34;&gt;Web Apps&lt;/a&gt;. From previous research, it has been found that Web Apps can avoid various limitations. Also in the case of this situation, Web Apps could avoid the above limitations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changing from &#39;float64&#39; to &#39;int&#39; for Values did Unmarshal using &#39;map[string]interface{}&#39;</title>
      <link>https://tanaikech.github.io/2017/06/02/changing-from-float64-to-int-for-values-did-unmarshal-using-mapstringinterface/</link>
      <pubDate>Fri, 02 Jun 2017 17:22:13 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/02/changing-from-float64-to-int-for-values-did-unmarshal-using-mapstringinterface/</guid>
      <description>&lt;p&gt;This sample is for changing from &amp;ldquo;float64&amp;rdquo; to &amp;ldquo;int&amp;rdquo; for values did unmarshal using &lt;code&gt;map[string]interface{}&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When it did unmarshal using map[string]interface{}, a number with &amp;ldquo;int&amp;rdquo; was changed to &amp;ldquo;float64&amp;rdquo;. And it shows an error as follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Error :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;panic: interface conversion: interface {} is float64, not int&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Sample Script :&lt;/strong&gt;&#xA;It solves using following script.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;encoding/json&amp;#34;&#xA;    &amp;#34;fmt&amp;#34;&#xA;    &amp;#34;reflect&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;    data := `{&amp;#34;key&amp;#34;: 10}`&#xA;    var i map[string]interface{}&#xA;    json.Unmarshal([]byte(data), &amp;amp;i)&#xA;&#xA;    val1 := i[&amp;#34;key&amp;#34;]&#xA;    fmt.Printf(&amp;#34;%v, %v\n&amp;#34;, val1, reflect.TypeOf(val1)) // 10, float64&#xA;&#xA;    i[&amp;#34;key&amp;#34;] = int(i[&amp;#34;key&amp;#34;].(float64))&#xA;    val2 := i[&amp;#34;key&amp;#34;]&#xA;    fmt.Printf(&amp;#34;%v, %v\n&amp;#34;, val2, reflect.TypeOf(val2)) // 10, int&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://play.golang.org/p/kHroZ1rHVQ&#34;&gt;Go Playground&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing JSON Key by Golang</title>
      <link>https://tanaikech.github.io/2017/06/02/replacing-json-key-by-golang/</link>
      <pubDate>Fri, 02 Jun 2017 11:56:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/02/replacing-json-key-by-golang/</guid>
      <description>&lt;p&gt;This sample is for replacing JSON key by golang.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;encoding/json&amp;#34;&#xA;    &amp;#34;fmt&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;    json1 := `{&amp;#34;key1&amp;#34;: &amp;#34;value1&amp;#34;}`&#xA;&#xA;    obj := map[string]interface{}{}&#xA;    json.Unmarshal([]byte(json1), &amp;amp;obj)&#xA;&#xA;    fmt.Println(obj) // &amp;lt;-- map[key1:value1]&#xA;&#xA;    obj[&amp;#34;key2&amp;#34;] = obj[&amp;#34;key1&amp;#34;]&#xA;    delete(obj, &amp;#34;key1&amp;#34;)&#xA;&#xA;    fmt.Println(obj) // &amp;lt;-- map[key2:value1]&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Benchmark: Splitting Command-Line Arguments by Golang</title>
      <link>https://tanaikech.github.io/2017/06/02/benchmark-splitting-command-line-arguments-by-golang/</link>
      <pubDate>Fri, 02 Jun 2017 10:59:31 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/06/02/benchmark-splitting-command-line-arguments-by-golang/</guid>
      <description>&lt;p&gt;This sample script is for splitting command-line arguments by golang. There are 2 types. One is the regular expression is used. Another is that &lt;code&gt;Split()&lt;/code&gt; and &lt;code&gt;TrimSpace()&lt;/code&gt; are used.&lt;/p&gt;&#xA;&lt;p&gt;Here, each process speed was compared.&lt;/p&gt;&#xA;&lt;h2 id=&#34;script-&#34;&gt;Script :&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;regexp&amp;#34;&#xA;    &amp;#34;strings&amp;#34;&#xA;    &amp;#34;testing&amp;#34;&#xA;)&#xA;&#xA;func BenchmarkB1(b *testing.B) {&#xA;    str := &amp;#34;test1.txt, test2.txt&amp;#34;&#xA;    b.ResetTimer()&#xA;    for i := 0; i &amp;lt; b.N; i++ {&#xA;        ar := regexp.MustCompile(`\s*,\s*`).Split(str, -1)&#xA;        var result []string&#xA;        for _, x := range ar {&#xA;            result = append(result, x) // --&amp;gt; &amp;#39;test.js&amp;#39;, &amp;#39;test2.py&amp;#39;&#xA;        }&#xA;        _ = result&#xA;    }&#xA;}&#xA;&#xA;func BenchmarkB2(b *testing.B) {&#xA;    str := &amp;#34;test1.txt, test2.txt&amp;#34;&#xA;    b.ResetTimer()&#xA;    for i := 0; i &amp;lt; b.N; i++ {&#xA;        ar := strings.Split(str, &amp;#34;,&amp;#34;)&#xA;        var result []string&#xA;        for _, x := range ar {&#xA;            result = append(result, strings.TrimSpace(x)) // --&amp;gt; &amp;#39;test.js&amp;#39;, &amp;#39;test2.py&amp;#39;&#xA;        }&#xA;        _ = result&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;result-&#34;&gt;Result :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ go test -bench .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BenchmarkB1-4             &lt;span style=&#34;color:#ae81ff&#34;&gt;100000&lt;/span&gt;             &lt;span style=&#34;color:#ae81ff&#34;&gt;13048&lt;/span&gt; ns/op&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BenchmarkB2-4            &lt;span style=&#34;color:#ae81ff&#34;&gt;3000000&lt;/span&gt;               &lt;span style=&#34;color:#ae81ff&#34;&gt;399&lt;/span&gt; ns/op&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PASS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Just as expected, the regular expression was slow. And it&amp;rsquo;s much slower than that of &lt;code&gt;Split()&lt;/code&gt; and &lt;code&gt;TrimSpace()&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v121</title>
      <link>https://tanaikech.github.io/2017/05/28/updated-ggsrun-to-v121/</link>
      <pubDate>Sun, 28 May 2017 14:20:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/28/updated-ggsrun-to-v121/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v121&#34;&gt;ggsrun was updated to v.1.2.1&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Configuration file (&lt;code&gt;ggsrun.cfg&lt;/code&gt;) became to be able to be read using the environment variable.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Embedding a Chart to a Cell using Custom Function on Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/05/26/embedding-a-chart-to-a-cell-using-custom-function-on-spreadsheet/</link>
      <pubDate>Fri, 26 May 2017 11:59:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/26/embedding-a-chart-to-a-cell-using-custom-function-on-spreadsheet/</guid>
      <description>&lt;p&gt;This sample script embeds a chart to a cell using custom function on Spreadsheet.&lt;/p&gt;&#xA;&lt;p&gt;I think that this method is one of various ideas.&lt;/p&gt;&#xA;&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;&#xA;&lt;p&gt;When you want to create a chart and embed it to a cell using custom functions, you notice that &lt;code&gt;insertChart()&lt;/code&gt; cannot be used. There are some limitations for using custom functions. But &lt;code&gt;insertChart()&lt;/code&gt; creates floating charts. So in order to embed a chart to a cell, the function &lt;code&gt;=IMAGE()&lt;/code&gt; is suitable for this situation. Here, &lt;code&gt;setFormula()&lt;/code&gt; for setting &lt;code&gt;=IMAGE()&lt;/code&gt; and &lt;code&gt;DriveApp.createFile()&lt;/code&gt; for creating images from charts also cannot be used for custom functions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving HTML File ID from Microsoft Docx File on Google Drive</title>
      <link>https://tanaikech.github.io/2017/05/24/retrieving-html-file-id-from-microsoft-docx-file-on-google-drive/</link>
      <pubDate>Wed, 24 May 2017 09:08:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/24/retrieving-html-file-id-from-microsoft-docx-file-on-google-drive/</guid>
      <description>&lt;p&gt;This sample script converts from Microsoft Docx File on Google Drive to Google Spreadsheet, and converts to HTML file.&lt;/p&gt;&#xA;&lt;p&gt;Drive APIs v2 and v3 are used for this. Please set as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/drive/v2/reference/&#34;&gt;Drive API v2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/drive/v3/reference/&#34;&gt;Drive API v3&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&amp;ldquo;Drive API v2&amp;rdquo; can be used at Google Apps Script by enabling Drive API of Advanced Google services and of Google API Console.&lt;/p&gt;&#xA;&lt;p&gt;How to use it is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In the script editor, select Resources &amp;gt; Advanced Google services&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decoding JSON by Golang</title>
      <link>https://tanaikech.github.io/2017/05/21/decoding-json-by-golang/</link>
      <pubDate>Sun, 21 May 2017 11:55:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/21/decoding-json-by-golang/</guid>
      <description>&lt;p&gt;Decoding JSON by Golang&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;    data := `{&#xA;      &amp;#34;A_key1&amp;#34;: {&#xA;        &amp;#34;B_key1&amp;#34;: {&#xA;          &amp;#34;C_key&amp;#34;: &amp;#34;value&amp;#34;&#xA;        }&#xA;      },&#xA;      &amp;#34;A_key2&amp;#34;: {&#xA;        &amp;#34;B_key2&amp;#34;: {&#xA;          &amp;#34;C_key&amp;#34;: &amp;#34;value&amp;#34;&#xA;        }&#xA;      },&#xA;      &amp;#34;A_key3&amp;#34;: {&#xA;        &amp;#34;B_key3&amp;#34;: {&#xA;          &amp;#34;C_key&amp;#34;: &amp;#34;value&amp;#34;&#xA;        }&#xA;      },&#xA;      &amp;#34;A_key4&amp;#34;: {&#xA;        &amp;#34;B_key4&amp;#34;: {&#xA;          &amp;#34;C_key&amp;#34;: &amp;#34;value&amp;#34;&#xA;        }&#xA;      },&#xA;      &amp;#34;A_key5&amp;#34;: {&#xA;        &amp;#34;B_key5&amp;#34;: {&#xA;          &amp;#34;C_key&amp;#34;: &amp;#34;value&amp;#34;&#xA;        }&#xA;      }&#xA;    }`&#xA;    var p interface{}&#xA;    json.NewDecoder(strings.NewReader(data)).Decode(&amp;amp;p)&#xA;    fmt.Println(p)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://play.golang.org/p/A86B8YHd5m&#34;&gt;Go Playground&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamically Creating JSON by Golang</title>
      <link>https://tanaikech.github.io/2017/05/21/dynamically-creating-json-by-golang/</link>
      <pubDate>Sun, 21 May 2017 10:55:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/21/dynamically-creating-json-by-golang/</guid>
      <description>&lt;p&gt;Dynamically Creating JSON by Golang&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;obj := map[string]interface{}{}&#xA;obj[&amp;#34;hoge&amp;#34;] = &amp;#34;huga&amp;#34;&#xA;fmt.Println(obj)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://play.golang.org/p/7mLXgwddWO&#34;&gt;Go Playground&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving Response Headers by Golang</title>
      <link>https://tanaikech.github.io/2017/05/21/retrieving-response-headers-by-golang/</link>
      <pubDate>Sun, 21 May 2017 10:43:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/21/retrieving-response-headers-by-golang/</guid>
      <description>&lt;p&gt;Retrieving Response Headers by Golang&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;res, _ := client.Do(req)&#xA;contentType := res.Header.Get(&amp;#34;Content-Type&amp;#34;)&#xA;contentLength := res.Header.Get(&amp;#34;Content-Length&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v120</title>
      <link>https://tanaikech.github.io/2017/05/19/updated-ggsrun-to-v120/</link>
      <pubDate>Fri, 19 May 2017 08:49:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/19/updated-ggsrun-to-v120/</guid>
      <description>&lt;h1 id=&#34;ggsrun-was-updated-to-v120&#34;&gt;ggsrun was updated to v.1.2.0&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Added a command for retrieving revision files on Google Drive.&lt;/li&gt;&#xA;&lt;li&gt;Some modifications.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You can check this at &lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated: CLI Tool - goris</title>
      <link>https://tanaikech.github.io/2017/05/16/updated-cli-tool-goris/</link>
      <pubDate>Tue, 16 May 2017 12:56:16 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/16/updated-cli-tool-goris/</guid>
      <description>&lt;p&gt;goris is a CLI tool to search for images with Google Reverse Image Search.&lt;/p&gt;&#xA;&lt;p&gt;Today, it was updated to v1.0.1. Please check it out. &lt;a href=&#34;https://github.com/tanaikech/goris&#34;&gt;https://github.com/tanaikech/goris&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When number of retrieved URLs is smaller than number of default output, an error had occurred. This was fixed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changing Line to Bars for Combo Chart using GAS</title>
      <link>https://tanaikech.github.io/2017/05/16/changing-line-to-bars-for-combo-chart-using-gas/</link>
      <pubDate>Tue, 16 May 2017 11:42:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/16/changing-line-to-bars-for-combo-chart-using-gas/</guid>
      <description>&lt;h2 id=&#34;sample-data&#34;&gt;Sample data&lt;/h2&gt;&#xA;&lt;p&gt;This is a sample data for this sample script. The column B was created by the normal distribution formula, and the column C was created by multiplying random number for column B.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csv&#34; data-lang=&#34;csv&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;A&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; B&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; C&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;1.0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0001&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;1.5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0009&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0006&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;2.0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0044&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0037&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;2.5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0175&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0133&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;3.0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0540&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0236&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;3.5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.1296&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0533&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;4.0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.2420&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0073&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;4.5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.3522&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.2468&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;5.0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.3990&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0843&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;5.5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.3522&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.3352&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;6.0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.2420&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.2201&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;6.5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.1296&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0607&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;7.0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0540&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0256&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;7.5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0175&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0006&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;8.0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0044&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0030&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;8.5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0009&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0005&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;9.0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0001&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt; 0.0001&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;create-chart&#34;&gt;Create chart&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;createChart()&lt;/code&gt; creates a chart from data. A chart with 2 lines is created by this method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending E-mail When Spreadsheet was Edited from Outside by Sheet API</title>
      <link>https://tanaikech.github.io/2017/05/14/sending-e-mail-when-spreadsheet-was-edited-from-outside-by-sheet-api/</link>
      <pubDate>Sun, 14 May 2017 17:43:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/14/sending-e-mail-when-spreadsheet-was-edited-from-outside-by-sheet-api/</guid>
      <description>&lt;p&gt;This sample script sends an e-mail, when spreadsheet was edited from outside by Sheet API v4. When you use this sample, please create a container bound script with spreadsheet which is edited by Sheet API. And please input your e-mail and run firstly a method of &lt;code&gt;createTrigger()&lt;/code&gt;. By this, a trigger is installed as &lt;code&gt;onChange()&lt;/code&gt;. After this, edit spreadsheet from outside by Sheet API v4.&lt;/p&gt;&#xA;&lt;p&gt;When when spreadsheet was edited from outside by Sheet API v4, I used &lt;code&gt;sendEmail()&lt;/code&gt; as a sample, because script editor is closed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>File Transfer for Google Drive Without Authorization</title>
      <link>https://tanaikech.github.io/2017/05/10/file-transfer-for-google-drive-without-authorization/</link>
      <pubDate>Wed, 10 May 2017 13:28:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/10/file-transfer-for-google-drive-without-authorization/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;In this article, I would like to introduce how to transfer files for Google Drive under no authorization.&lt;/p&gt;&#xA;&lt;p&gt;This has also been published here. &lt;a href=&#34;https://github.com/tanaikech/FileTransfer&#34;&gt;https://github.com/tanaikech/FileTransfer&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When we download and upload files for Google Drive, it usually has to use Drive API. In order to use Drive API, access token is required. If you want to make your friends download and upload files for your Google Drive, the authorization process is to take time. So I proposal this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamical Nested JSON Objects by Golang</title>
      <link>https://tanaikech.github.io/2017/05/09/dynamical-nested-json-objects-by-golang/</link>
      <pubDate>Tue, 09 May 2017 15:58:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/09/dynamical-nested-json-objects-by-golang/</guid>
      <description>&lt;p&gt;This sample script dynamically creates nested JSON objects.&lt;/p&gt;&#xA;&lt;h3 id=&#34;script&#34;&gt;Script&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;obj := map[string]interface{}{}&#xA;for i := 1; i &amp;lt;= 5; i++ {&#xA;    value := map[string]interface{}{&#xA;        fmt.Sprintf(&amp;#34;B_key%d&amp;#34;, i): map[string]interface{}{&#xA;            &amp;#34;C_key&amp;#34;: &amp;#34;value&amp;#34;,&#xA;        },&#xA;    }&#xA;    obj[fmt.Sprintf(&amp;#34;A_key%d&amp;#34;, i)] = value&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;result&#34;&gt;Result&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;A_key1&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;B_key1&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;C_key&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;A_key2&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;B_key2&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;C_key&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;A_key3&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;B_key3&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;C_key&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;A_key4&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;B_key4&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;C_key&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;A_key5&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;B_key5&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;C_key&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Changing Slack Status using Google Apps Script</title>
      <link>https://tanaikech.github.io/2017/05/09/changing-slack-status-using-google-apps-script/</link>
      <pubDate>Tue, 09 May 2017 10:58:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/09/changing-slack-status-using-google-apps-script/</guid>
      <description>&lt;p&gt;This script changes slack status using GAS. If you want to change it on time you decided, it can be achieved by installing this method as a trigger.&lt;/p&gt;&#xA;&lt;p&gt;In order to use this, the required scope is &lt;strong&gt;&lt;code&gt;users.profile:write&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setSlackStatus&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;status_text&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;status_emoji&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://slack.com/api/users.profile.set&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;post&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;payload&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;profile&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({&lt;span style=&#34;color:#a6e22e&#34;&gt;status_text&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;status_text&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;status_emoji&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;status_emoji&lt;/span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;muteHttpExceptions&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ).&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setSlackStatus&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;### Your access token ###&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;### User ID ###&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sample&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:coffee:&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  );&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Delete Line Feed Code by DOS and Bash</title>
      <link>https://tanaikech.github.io/2017/05/09/delete-line-feed-code-by-dos-and-bash/</link>
      <pubDate>Tue, 09 May 2017 09:36:43 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/09/delete-line-feed-code-by-dos-and-bash/</guid>
      <description>&lt;h3 id=&#34;input-json&#34;&gt;Input JSON&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;text.txt :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;values&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a1&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b1&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a2&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b2&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c2&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a3&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b3&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c3&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a4&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b4&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c4&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a5&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b5&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c5&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;windows-dos&#34;&gt;Windows DOS&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;type text.txt | jq -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;linux-bash&#34;&gt;Linux Bash&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cat text.txt | jq -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;output-json&#34;&gt;Output JSON&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;values&amp;#34;&lt;/span&gt;:[[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a1&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b1&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c1&amp;#34;&lt;/span&gt;],[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a2&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b2&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c2&amp;#34;&lt;/span&gt;],[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a3&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b3&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c3&amp;#34;&lt;/span&gt;],[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a4&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b4&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c4&amp;#34;&lt;/span&gt;],[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a5&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b5&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c5&amp;#34;&lt;/span&gt;]]}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Updated: CLI Tool - gogauth</title>
      <link>https://tanaikech.github.io/2017/05/09/updated-cli-tool-gogauth/</link>
      <pubDate>Tue, 09 May 2017 09:00:04 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/09/updated-cli-tool-gogauth/</guid>
      <description>&lt;p&gt;gogauth is a CLI tool to easily retrieve access token for using APIs on Google.&lt;/p&gt;&#xA;&lt;p&gt;I thought that if the access token can easily retrieve, it may be useful for users who can use various convenience Google APIs. So I created this. Also this can be used for testing sample script like the demo. If this will be helpful for you, I&amp;rsquo;m glad.&lt;/p&gt;&#xA;&lt;p&gt;Today, it was updated to v2.0.1. Please check it out. &lt;a href=&#34;https://github.com/tanaikech/gogauth&#34;&gt;https://github.com/tanaikech/gogauth&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>OCR using Google Drive API</title>
      <link>https://tanaikech.github.io/2017/05/02/ocr-using-google-drive-api/</link>
      <pubDate>Tue, 02 May 2017 14:21:55 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/02/ocr-using-google-drive-api/</guid>
      <description>&lt;p&gt;This is a sample script for OCR using Google Drive API. A text file which converted by OCR can be retrieved by inputting an image file.&lt;/p&gt;&#xA;&lt;p&gt;In this sample, Python Quickstart is used. The detail information is &lt;a href=&#34;https://developers.google.com/drive/v3/web/quickstart/python&#34;&gt;https://developers.google.com/drive/v3/web/quickstart/python&lt;/a&gt;. Please read “Step 1: Turn on the Drive API” and “Step 2: Install the Google Client Library”.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; __future__ &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; print_function&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; httplib2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; os&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; apiclient &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; discovery&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; oauth2client &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; oauth2client &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; tools&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; oauth2client.file &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Storage&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; apiclient.http &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; MediaFileUpload, MediaIoBaseDownload&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; argparse&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    flags &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; argparse&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ArgumentParser(parents&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[tools&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;argparser])&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;parse_args()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ImportError&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    flags &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# If modifying these scopes, delete your previously saved credentials&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# at ~/.credentials/drive-python-quickstart.json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SCOPES &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.googleapis.com/auth/drive&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CLIENT_SECRET_FILE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;client_secret.json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;APPLICATION_NAME &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Drive API Python Quickstart&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_credentials&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Gets valid user credentials from storage.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    If nothing has been stored, or if the stored credentials are invalid,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    the OAuth2 flow is completed to obtain the new credentials.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    Returns:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        Credentials, the obtained credential.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    credential_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;drive-python-quickstart.json&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    store &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Storage(credential_path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    credentials &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; store&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; credentials &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; credentials&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;invalid:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        flow &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; client&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        flow&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;user_agent &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; APPLICATION_NAME&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; flags:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            credentials &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; tools&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run_flow(flow, store, flags)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:  &lt;span style=&#34;color:#75715e&#34;&gt;# Needed only for compatibility with Python 2.6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            credentials &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; tools&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run(flow, store)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Storing credentials to &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; credential_path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; credentials&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    credentials &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; get_credentials()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    http &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; credentials&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;authorize(httplib2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Http())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    service &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; discovery&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;build(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;drive&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;v3&amp;#39;&lt;/span&gt;, http&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    imgfile &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sample.png&amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# Image with texts (png, jpg, bmp, gif, pdf)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    txtfile &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;output.txt&amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# Text file outputted by OCR&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mime &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;application/vnd.google-apps.document&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; service&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;files()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;create(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        body&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;: imgfile,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mimeType&amp;#39;&lt;/span&gt;: mime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        media_body&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;MediaFileUpload(imgfile, mimetype&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mime, resumable&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;execute()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    downloader &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; MediaIoBaseDownload(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        io&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;FileIO(txtfile, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;wb&amp;#39;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        service&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;files()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;export_media(fileId&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;res[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;], mimeType&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    done &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; done &lt;span style=&#34;color:#f92672&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        status, done &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; downloader&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;next_chunk()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    service&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;files()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;delete(fileId&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;res[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;])&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;execute()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Done.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    main()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Converting PDF to TXT</title>
      <link>https://tanaikech.github.io/2017/05/01/converting-pdf-to-txt/</link>
      <pubDate>Mon, 01 May 2017 15:04:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/05/01/converting-pdf-to-txt/</guid>
      <description>&lt;p&gt;This is a sample script for converting a PDF file to a TXT file. 2 steps are required for this.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Upload a PDF file as a Google Document&lt;/li&gt;&#xA;&lt;li&gt;Download a Google Document as a TXT file&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In this sample, Python Quickstart is used. The detail information is &lt;a href=&#34;https://developers.google.com/drive/v3/web/quickstart/python&#34;&gt;https://developers.google.com/drive/v3/web/quickstart/python&lt;/a&gt;. Please read &amp;ldquo;Step 1: Turn on the Drive API&amp;rdquo; and &amp;ldquo;Step 2: Install the Google Client Library&amp;rdquo;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; __future__ &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; print_function&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; httplib2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; os&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; apiclient &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; discovery&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; oauth2client &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; oauth2client &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; tools&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; oauth2client.file &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Storage&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; apiclient.http &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; MediaFileUpload, MediaIoBaseDownload&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; argparse&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    flags &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; argparse&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ArgumentParser(parents&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[tools&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;argparser])&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;parse_args()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ImportError&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    flags &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SCOPES &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.googleapis.com/auth/drive&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CLIENT_SECRET_FILE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;client_secret.json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;APPLICATION_NAME &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Drive API Python Quickstart&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_credentials&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    credential_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;drive-python-quickstart.json&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    store &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Storage(credential_path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    credentials &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; store&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; credentials &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; credentials&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;invalid:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        flow &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; client&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        flow&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;user_agent &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; APPLICATION_NAME&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; flags:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            credentials &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; tools&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run_flow(flow, store, flags)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:  &lt;span style=&#34;color:#75715e&#34;&gt;# Needed only for compatibility with Python 2.6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            credentials &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; tools&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run(flow, store)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Storing credentials to &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; credential_path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; credentials&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    credentials &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; get_credentials()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    http &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; credentials&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;authorize(httplib2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Http())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    service &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; discovery&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;build(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;drive&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;v3&amp;#39;&lt;/span&gt;, http&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pdffile &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sample.pdf&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    txtfile &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sample.txt&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mime &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;application/vnd.google-apps.document&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; service&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;files()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;create(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        body&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;: pdffile,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mimeType&amp;#39;&lt;/span&gt;: mime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        media_body&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;MediaFileUpload(pdffile, mimetype&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mime, resumable&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;execute()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dl &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; MediaIoBaseDownload(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        io&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;FileIO(txtfile, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;wb&amp;#39;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        service&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;files()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;export_media(fileId&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;res[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;], mimeType&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    done &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; done &lt;span style=&#34;color:#f92672&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        status, done &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dl&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;next_chunk()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Done.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    main()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Updated ggsrun to v110</title>
      <link>https://tanaikech.github.io/2017/04/30/updated-ggsrun-to-v110/</link>
      <pubDate>Sun, 30 Apr 2017 11:49:35 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/30/updated-ggsrun-to-v110/</guid>
      <description>&lt;h2 id=&#34;updated-ggsrun-to-v110&#34;&gt;Updated ggsrun to v.1.1.0&lt;/h2&gt;&#xA;&lt;p&gt;Added a command for updating existing project on Google Drive. One of scripts in the project can be also updated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/ggsrun&#34;&gt;https://github.com/tanaikech/ggsrun&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving User Information with Shared Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/04/27/retrieving-user-information-with-shared-spreadsheet/</link>
      <pubDate>Thu, 27 Apr 2017 14:34:22 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/27/retrieving-user-information-with-shared-spreadsheet/</guid>
      <description>&lt;p&gt;This sample script retrieves the user information which is editing the shared spreadsheet.&lt;/p&gt;&#xA;&lt;p&gt;It was found as follows.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;User information retrieving by Class Session is the owner and users which installed triggers by themselves.&lt;/li&gt;&#xA;&lt;li&gt;When each user installs a trigger, user information retrieving by Class Session losts the accuracy. So user information has to be retrieved using a temporally installed trigger.&lt;/li&gt;&#xA;&lt;li&gt;Using &lt;code&gt;onOpen()&lt;/code&gt;, it cannot directly install triggers and authorize.&lt;/li&gt;&#xA;&lt;li&gt;Using menu bar, it can install triggers and authorize Google Services using API.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Here, I thought 2 problems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CLI Tool - goris</title>
      <link>https://tanaikech.github.io/2017/04/26/cli-tool-goris/</link>
      <pubDate>Wed, 26 Apr 2017 16:52:10 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/26/cli-tool-goris/</guid>
      <description>&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;&#xA;&lt;p&gt;This is a CLI tool to search for images with &lt;strong&gt;Go&lt;/strong&gt;ogle &lt;strong&gt;R&lt;/strong&gt;everse &lt;strong&gt;I&lt;/strong&gt;mage &lt;strong&gt;S&lt;/strong&gt;earch.&lt;/p&gt;&#xA;&lt;h3 id=&#34;motivation&#34;&gt;Motivation&lt;/h3&gt;&#xA;&lt;p&gt;Because I had wanted to search for images with an image URL and file on my terminal, I created this. This can download images from searched image URLs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;font color=&#34;#3366CC&#34;&gt;&lt;strong&gt;The detail information and how to get this are &lt;a href=&#34;https://github.com/tanaikech/goris&#34;&gt;https://github.com/tanaikech/goris&lt;/a&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CLI Tool - ggsrun</title>
      <link>https://tanaikech.github.io/2017/04/24/cli-tool-ggsrun/</link>
      <pubDate>Mon, 24 Apr 2017 15:07:11 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/24/cli-tool-ggsrun/</guid>
      <description>&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;&#xA;&lt;p&gt;This is a CLI tool to execute Google Apps Script (GAS) on a terminal.&lt;/p&gt;&#xA;&lt;h3 id=&#34;motivation&#34;&gt;Motivation&lt;/h3&gt;&#xA;&lt;p&gt;Will you want to develop GAS using CoffeeScript on your local PC? Generally, when we develop GAS, we have to login to Google using own browser and develop it using Javascript on the Script Editor. Recently, I have wanted to have more convenient local-environment for developing GAS. So I created this &amp;ldquo;ggsrun&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/readme_sublimedemo.gif&#34;&#xA;     alt=&#34;CLI Tool - ggsrun&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Overwriting Spreadsheet to Existing Excel File</title>
      <link>https://tanaikech.github.io/2017/04/21/overwriting-spreadsheet-to-existing-excel-file/</link>
      <pubDate>Fri, 21 Apr 2017 13:13:00 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/21/overwriting-spreadsheet-to-existing-excel-file/</guid>
      <description>&lt;p&gt;This sample script converts a spreadsheet to excel file, and overwrites the excel file to the existing excel file. When you use this script, at first, &lt;u&gt;please confirm whether Drive API is enabled at Google API console.&lt;/u&gt; Because the existing excel file is overwritten, the file name and file ID are not changed.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;overWrite&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;src_spreadsheetId&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dst_excelfileId&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accesstoken&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ScriptApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getOAuthToken&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/upload/drive/v3/files/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;dst_excelfileId&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;?uploadType=multipart&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PATCH&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&lt;span style=&#34;color:#a6e22e&#34;&gt;Authorization&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bearer &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accesstoken&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;contentType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;payload&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.googleapis.com/drive/v3/files/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/export?mimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {&lt;span style=&#34;color:#a6e22e&#34;&gt;Authorization&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bearer &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;muteHttpExceptions&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ).&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getBytes&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }(&lt;span style=&#34;color:#a6e22e&#34;&gt;accesstoken&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;src_spreadsheetId&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ).&lt;span style=&#34;color:#a6e22e&#34;&gt;getContentText&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Converting Spreadsheet to PDF</title>
      <link>https://tanaikech.github.io/2017/04/20/converting-spreadsheet-to-pdf/</link>
      <pubDate>Thu, 20 Apr 2017 07:56:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/20/converting-spreadsheet-to-pdf/</guid>
      <description>&lt;p&gt;Converting Spreadsheet to PDF&lt;/p&gt;&#xA;&lt;p&gt;This sample script converts from a spreadsheet to a PDF file which has all sheets in the spreadsheet. When you use this, please enable Drive API at Google API console.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var spreadsheetId = &amp;#34;#####&amp;#34;;&#xA;var folderId = &amp;#34;#####&amp;#34;;&#xA;var outputFilename = &amp;#34;#####&amp;#34;;&#xA;&#xA;DriveApp.getFolderById(folderId)&#xA;    .createFile(UrlFetchApp.fetch(&#xA;      &amp;#34;https://www.googleapis.com/drive/v3/files/&amp;#34; +&#xA;        spreadsheetId +&#xA;        &amp;#34;/export?mimeType=application/pdf&amp;#34;,&#xA;      {&#xA;        method: &amp;#34;GET&amp;#34;,&#xA;        headers: {Authorization: &amp;#34;Bearer &amp;#34; + ScriptApp.getOAuthToken()},&#xA;        muteHttpExceptions: true&#xA;      })&#xA;    .getBlob())&#xA;    .setName(outputFilename);&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Updated: CLI Tool - gogauth</title>
      <link>https://tanaikech.github.io/2017/04/19/updated-cli-tool-gogauth/</link>
      <pubDate>Wed, 19 Apr 2017 13:34:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/19/updated-cli-tool-gogauth/</guid>
      <description>&lt;p&gt;gogauth is a CLI tool to retrieve easily access token for using APIs on Google.&lt;/p&gt;&#xA;&lt;p&gt;Today, it was updated with big changes. Please check it out.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tanaikech/gogauth&#34;&gt;https://github.com/tanaikech/gogauth&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - CreateImg</title>
      <link>https://tanaikech.github.io/2017/04/17/gas-library-createimg/</link>
      <pubDate>Mon, 17 Apr 2017 15:29:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/17/gas-library-createimg/</guid>
      <description>&lt;p&gt;Recently, I had been looking for creating an image from coordinate data. Unfortunately I have never found them. So I made this. This Google Apps Script (GAS) library creates an image file from coordinate data.&lt;/p&gt;&#xA;&lt;p&gt;You can see the detail information at &lt;a href=&#34;https://github.com/tanaikech/CreateImg&#34;&gt;https://github.com/tanaikech/CreateImg&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There is a part where I would like to improve in this library. That&amp;rsquo;s &lt;code&gt;convByteSlice()&lt;/code&gt;. I think that there is the method to be faster about the part. If you know much about the logical operation using GAS, if you teach me about the improvements. I&amp;rsquo;m so glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comprehension of GAS</title>
      <link>https://tanaikech.github.io/2017/04/17/comprehension-of-gas/</link>
      <pubDate>Mon, 17 Apr 2017 08:16:36 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/17/comprehension-of-gas/</guid>
      <description>&lt;p&gt;Here, I would like to introduce a comprehension of GAS.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var data = [[[0], [1], [2], [3]], [[4], [5], [6], [7]]];&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[[0.0, 2.0], [0.0, 2.0]]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;pattern-1&#34;&gt;Pattern 1&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var a = [];&#xA;for (var i=0; i&amp;lt;data.length; i++) {&#xA;  var temp = [];&#xA;  for (var j=0; j&amp;lt;data[i].length; j++) {&#xA;    if (data[i][j][0] % 2 == 0) temp.push(j);&#xA;  }&#xA;  a.push(temp);&#xA;}&#xA;Logger.log(a)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;pattern-2&#34;&gt;Pattern 2&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var b = [];&#xA;data.forEach(function(e1){&#xA;  var temp = [];&#xA;  e1.forEach(function(e2, i2){&#xA;    if (e2[0] % 2 == 0) temp.push(parseInt(i2, 10));&#xA;  });&#xA;  b.push(temp);&#xA;});&#xA;Logger.log(b)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;pattern-3&#34;&gt;Pattern 3&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var c = [[parseInt(i, 10) for (i in e) if (e[i][0] % 2 == 0)] for each (e in data)];&#xA;Logger.log(c)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;GAS can use JavaScript 1.7. So it can write as above.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Spreadsheet from Excel file</title>
      <link>https://tanaikech.github.io/2017/04/15/creating-spreadsheet-from-excel-file/</link>
      <pubDate>Sat, 15 Apr 2017 10:39:05 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/15/creating-spreadsheet-from-excel-file/</guid>
      <description>&lt;p&gt;These scripts can be executed on Script Editor. But, in order to use these, you have to enable Drive API of Advanced Google services and of Google API Console. &amp;ldquo;Drive API v2&amp;rdquo; can be used at Google Apps Script by enabling Drive API of Advanced Google services and of Google API Console.&lt;/p&gt;&#xA;&lt;p&gt;How to use it is as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In the script editor, select Resources &amp;gt; Advanced Google services&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In the dialog that appears, click the on/off switch for &lt;a href=&#34;https://developers.google.com/drive/v2/reference/&#34;&gt;Drive API v2&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Downloaded Excel file as Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/04/14/creating-downloaded-excel-file-as-spreadsheet/</link>
      <pubDate>Fri, 14 Apr 2017 18:03:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/14/creating-downloaded-excel-file-as-spreadsheet/</guid>
      <description>&lt;p&gt;This is a sample GAS script to create an Excel file, which was downloaded from web, as Spreadsheet. By using Drive API, it can be achieved without access token.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Script :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;downloadFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fileURL&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileURL&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.+/(.+?)([\?#;].*)?$&amp;#34;&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UrlFetchApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fileURL&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getResponseCode&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBlob&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resource&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mimeType&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/vnd.google-apps.spreadsheet&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;parents&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [{&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;}],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Drive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;insert&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;resource&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileInfo&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;rc&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getBytes&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fileInfo&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Result :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;sample.xlsx&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;10000.0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;##&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;file&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;##&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Removes Duplicate JSON Elements for a Value of a Certain Key</title>
      <link>https://tanaikech.github.io/2017/04/09/removes-duplicate-json-elements-for-a-value-of-a-certain-key/</link>
      <pubDate>Sun, 09 Apr 2017 14:24:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/04/09/removes-duplicate-json-elements-for-a-value-of-a-certain-key/</guid>
      <description>&lt;p&gt;This sample removes duplicate JSON elements for a value of a certain key. When the value of the certain key is removed, only a first duplicate element is left. Also I had wanted to be used for Google Apps Script. So it became like this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Script :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;function removeDup(arr, key){&#xA;    var temp = [];&#xA;    var out = [];&#xA;    arr.forEach( function (e, i) {&#xA;        temp[i] = (temp.indexOf(e[key]) === -1) ? e[key] : false;&#xA;        if (temp[i]) out.push(e);&#xA;    });&#xA;    return out;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;JSON :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flattening Nested Array using CoffeeScript</title>
      <link>https://tanaikech.github.io/2017/03/31/flattening-nested-array-using-coffeescript/</link>
      <pubDate>Fri, 31 Mar 2017 10:48:33 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/03/31/flattening-nested-array-using-coffeescript/</guid>
      <description>&lt;p&gt;This sample flattens a nested array using CoffeeScript.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flatten = (array) -&amp;gt;&#xA;    array.reduce(((x, y) -&amp;gt; if Array.isArray(y) then x.concat(flatten(y)) else x.concat(y)), [])&#xA;&#xA;console.log flatten [1, [2, 3, [4, 5]], 6, [7, [8, [9], 10] ,11 , 12], 13]&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt; [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ]&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>How to use &#34;fields&#34; of Drive APIs</title>
      <link>https://tanaikech.github.io/2017/03/30/how-to-use-fields-of-drive-apis/</link>
      <pubDate>Thu, 30 Mar 2017 08:53:21 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/03/30/how-to-use-fields-of-drive-apis/</guid>
      <description>&lt;p&gt;There are a lot of APIs on Google. When we use Google Drive APIs, they usually have &amp;ldquo;fields&amp;rdquo; as a resource. The parameter &amp;ldquo;fields&amp;rdquo; gives various information which is selected to us. This is one of important parameters. And this can be used at Google Apps Script (GAS) although that version is v2. About how to use it, there are &lt;a href=&#34;https://developers.google.com/drive/v2/reference/&#34;&gt;some documents&lt;/a&gt;. But it is difficult to find how to use it at GAS. So I would like to write down here as a memorandum. Most parameters for APIs have to be expressed as JSON. However, the expressions are different for each API. I would like to introduce this using some samples. &lt;strong&gt;This is for GAS.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieve old revision file from Google Drive</title>
      <link>https://tanaikech.github.io/2017/03/29/retrieve-old-revision-file-from-google-drive/</link>
      <pubDate>Wed, 29 Mar 2017 16:00:06 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/03/29/retrieve-old-revision-file-from-google-drive/</guid>
      <description>&lt;p&gt;I introduce 2 kinds of methods. One is to use &lt;code&gt;curl&lt;/code&gt;. Another is to use &lt;code&gt;wget&lt;/code&gt;. At this time, I could know that &lt;code&gt;wget&lt;/code&gt; can be also used as same as &lt;code&gt;curl&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In order to use this, at first, please retrieve your access token and enable Drive API.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-file-id&#34;&gt;1. File ID&lt;/h3&gt;&#xA;&lt;p&gt;Retrieve file id from file name.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X GET -sSL &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Authorization: Bearer ### Access token ###&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.googleapis.com/drive/v3/files?q=name=&amp;#34;### FileName ###&amp;#34;&amp;amp;fields=files(id,name)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget -q --header&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Authorization: Bearer ### Access token ###&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.googleapis.com/drive/v3/files?q=name=&amp;#34;### FileName ###&amp;#34;&amp;amp;fields=files(id,name)&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Reference : &lt;a href=&#34;https://developers.google.com/drive/v3/reference/files/list&#34;&gt;https://developers.google.com/drive/v3/reference/files/list&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Put a channel to a channel for golang</title>
      <link>https://tanaikech.github.io/2017/03/29/put-a-channel-to-a-channel-for-golang/</link>
      <pubDate>Wed, 29 Mar 2017 07:53:51 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/03/29/put-a-channel-to-a-channel-for-golang/</guid>
      <description>&lt;p&gt;I have never heard this. I would like to use this from now.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import &amp;#34;fmt&amp;#34;&#xA;&#xA;type st struct {&#xA;    data1 int&#xA;    data2 int&#xA;}&#xA;&#xA;func main() {&#xA;    c1 := make(chan *st, 1)&#xA;    c2 := make(chan *st, 1)&#xA;    c1 &amp;lt;- &amp;amp;st{1, 2}&#xA;    c2 &amp;lt;- &amp;lt;-c1&#xA;    close(c1)&#xA;    close(c2)&#xA;    res, _ := &amp;lt;-c2&#xA;    fmt.Println(res.data2)&#xA;}&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt; 2&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Retrieving File ID from File Name using GAS</title>
      <link>https://tanaikech.github.io/2017/03/23/retrieving-file-id-from-file-name-using-gas/</link>
      <pubDate>Thu, 23 Mar 2017 14:24:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/03/23/retrieving-file-id-from-file-name-using-gas/</guid>
      <description>&lt;p&gt;This is a sample script of GAS for converting file name to file id on Google Drive. Drive API is used for this. So please enable Drive API at Advanced Drive Services and Google API Console.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nameToId&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;each&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Drive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Files&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;({&lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;title=&amp;#39;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39; and trashed=false&amp;#34;&lt;/span&gt;}).&lt;span style=&#34;color:#a6e22e&#34;&gt;items&lt;/span&gt;)];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Transposing Array From (n x m) To (m x n) for javascript</title>
      <link>https://tanaikech.github.io/2017/03/21/transposing-array-from-n-x-m-to-m-x-n-for-javascript/</link>
      <pubDate>Tue, 21 Mar 2017 08:55:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/03/21/transposing-array-from-n-x-m-to-m-x-n-for-javascript/</guid>
      <description>&lt;p&gt;This script transposes from an array with n rows x m columns to the array with m rows x n columns. In this script, you can use array of &lt;code&gt;n != m &lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;array = [&#xA;    [a1, b1, c1, d1, e1],&#xA;    [a2, b2, c2, d2, e2],&#xA;    [a3, b3, c3, d3, e3],&#xA;    [a4, b4, c4, d4, e4],&#xA;    [a5, b5, c5, d5, e5],&#xA;    [a6, b6, c6, d6, e6],&#xA;    [a7, b7, c7, d7, e7],&#xA;    [a8, b8, c8, d8, e8],&#xA;    [a9, b9, c9, d9, e9],&#xA;    [a10, b10, c10, d10, e10]&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;array&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;array&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;){&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]}));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;result = [&#xA;    [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10],&#xA;    [b1, b2, b3, b4, b5, b6, b7, b8, b9, b10],&#xA;    [c1, c2, c3, c4, c5, c6, c7, c8, c9, c10],&#xA;    [d1, d2, d3, d4, d5, d6, d7, d8, d9, d10],&#xA;    [e1, e2, e3, e4, e5, e6, e7, e8, e9, e10]&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Download Files Without Authorization From Google Drive</title>
      <link>https://tanaikech.github.io/2017/03/20/download-files-without-authorization-from-google-drive/</link>
      <pubDate>Mon, 20 Mar 2017 14:30:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/03/20/download-files-without-authorization-from-google-drive/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;In this article, files can be downloaded without authorization.&lt;/p&gt;&#xA;&lt;h1 id=&#34;description&#34;&gt;Description&lt;/h1&gt;&#xA;&lt;p&gt;When we download files from Google Drive, it usually has to use Drive API. In order to use Drive API, access token is required. If you want to make your friends download files from your Google Drive, the authorization process is to take time. Also Web Link for each files can be used. But it has to set for each files. So I proposal this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create Folder Tree on Google Drive</title>
      <link>https://tanaikech.github.io/2017/03/13/create-folder-tree-on-google-drive/</link>
      <pubDate>Mon, 13 Mar 2017 13:27:57 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/03/13/create-folder-tree-on-google-drive/</guid>
      <description>&lt;p&gt;This is a sample script for creating a folder tree including all folders in Google Drive. For each element, parent folder and sub folder are retrieved.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Script :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;results&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;results&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getFolders&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hasNext&lt;/span&gt;()) &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;folders&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;next&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folder&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;)#_aabbccddee_#&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;array_folderSt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#_aabbccddee_#&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;array_folderSt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pop&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;results&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;array_folderSt&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;arguments&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;callee&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;results&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;results&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  })(&lt;span style=&#34;color:#a6e22e&#34;&gt;DriveApp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getRootFolder&lt;/span&gt;(),&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;,[]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Result :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;foldername&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(folder&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id)&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;foldername&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(folder&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id)&lt;/span&gt;, &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;sub&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;foldername&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;s(sub&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;folde&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id)&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;foldername&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(folder&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id)&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;foldername&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(folder&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id)&lt;/span&gt;, &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;sub&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;foldername&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;s&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(sub&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;folde&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;s&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id)&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;foldername&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(folder&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id)&lt;/span&gt;, &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;sub&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;foldername&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;s&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(sub&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;folde&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;s&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id)&lt;/span&gt;, &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;sub&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;foldername&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;s&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(sub&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;folde&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;s&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;id)&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;By the way :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;folderSt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Both scripts are the same meaning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CLI Tool - gogauth</title>
      <link>https://tanaikech.github.io/2017/02/24/cli-tool-gogauth/</link>
      <pubDate>Fri, 24 Feb 2017 12:29:32 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/24/cli-tool-gogauth/</guid>
      <description>&lt;p&gt;Released a CLI tool for easily retrieving accesstoken from Google OAuth2. The title is &lt;strong&gt;&lt;a href=&#34;https://github.com/tanaikech/gogauth&#34;&gt;gogauth&lt;/a&gt;&lt;/strong&gt;. When I have seen stackoverflow, I knew that it is difficult to retrieve accesstoken from Google OAuth2. So I made this.&lt;/p&gt;&#xA;&lt;p&gt;Features of this CLI tool are as follows.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Retrieves easily accesstoken from Google OAuth2 for using Drive API.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;If you have PhantomeJS, this retrieves &amp;ldquo;code&amp;rdquo; from Google using it. So you don&amp;rsquo;t need to launch your browser for retrieving &amp;ldquo;code&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Export CSV File from Spreadsheet and Make Download Button</title>
      <link>https://tanaikech.github.io/2017/02/20/export-csv-file-from-spreadsheet-and-make-download-button/</link>
      <pubDate>Mon, 20 Feb 2017 10:00:28 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/20/export-csv-file-from-spreadsheet-and-make-download-button/</guid>
      <description>&lt;p&gt;This is a script to export a CSV file from spreadsheet and make an user download it. When the users download it, they can download by push a button made by this script.&lt;/p&gt;&#xA;&lt;p&gt;In order to use this script, put both HTML and script in a GAS project.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;html :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This file name is &amp;ldquo;download.html&amp;rdquo;.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html&amp;gt;&#xA;  &amp;lt;body&amp;gt;&#xA;    Download CSV?&#xA;    &amp;lt;form&amp;gt;&#xA;      &amp;lt;input type=&amp;#34;button&amp;#34; value=&amp;#34;ok&amp;#34; onclick=&amp;#34;google.script.run&#xA;                                              .withSuccessHandler(executeDownload)&#xA;                                              .saveAsCSV();&amp;#34; /&amp;gt;&#xA;    &amp;lt;/form&amp;gt;&#xA;  &amp;lt;/body&amp;gt;&#xA;  &amp;lt;script&amp;gt;&#xA;    function executeDownload(url) {&#xA;      window.location.href = url;&#xA;    }&#xA;  &amp;lt;/script&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Script :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Send E-mail with xlsx File Converted from Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/02/20/send-e-mail-with-xlsx-file-converted-from-spreadsheet/</link>
      <pubDate>Mon, 20 Feb 2017 09:56:12 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/20/send-e-mail-with-xlsx-file-converted-from-spreadsheet/</guid>
      <description>&lt;p&gt;This is a script to send e-mail with a xlsx file converted from spreadsheet as an attachment file. Access token is necessary to use this script.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;function excelSender() {&#xA;  var accesstoken = &amp;#34;[your accesstoken]&amp;#34;;&#xA;  var sheetID = &amp;#34;[sheet id]&amp;#34;;&#xA;  var xlsxName = &amp;#34;[output xlsx file name]&amp;#34;&#xA;  var params = {&#xA;    &amp;#34;headers&amp;#34; : {Authorization: &amp;#34;Bearer &amp;#34; + accesstoken},&#xA;    &amp;#34;muteHttpExceptions&amp;#34; : true&#xA;  };&#xA;  var dUrl = &amp;#34;https://www.googleapis.com/drive/v3/files/&amp;#34; + sheetID + &amp;#34;/export?mimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&amp;#34;&#xA;  var xlsxlFile = UrlFetchApp.fetch(dUrl, params).getBlob().setName(xlsxName);&#xA;  MailApp.sendEmail({&#xA;    to: &amp;#34;[your mail address]&amp;#34;,&#xA;    subject: &amp;#34;sample mail&amp;#34;,&#xA;    body: &amp;#34;sample mail with an excel file&amp;#34;,&#xA;    attachments: [xlsxlFile]&#xA;  });&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Retrieving Access Token for Google Drive API using GAS</title>
      <link>https://tanaikech.github.io/2017/02/17/retrieving-access-token-for-google-drive-api-using-gas/</link>
      <pubDate>Fri, 17 Feb 2017 17:25:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/17/retrieving-access-token-for-google-drive-api-using-gas/</guid>
      <description>&lt;p&gt;These GASs retrieve an access token for using Google Drive API. There are 3 parts. Before you use this, please retrieve client ID, client secret and redirect uri from Google , and choose scopes.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-retrieving-code-from-web&#34;&gt;1. Retrieving code from web&lt;/h3&gt;&#xA;&lt;p&gt;This is a script to output URL for retrieving &amp;ldquo;code&amp;rdquo; from web. Please retrieve &amp;ldquo;code&amp;rdquo; by import this URL to your browser. After you run this script, using &amp;ldquo;url&amp;rdquo; got from this script, it retrieves &amp;ldquo;code&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Send E-mail with Excel file converted from Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/02/16/send-e-mail-with-excel-file-converted-from-spreadsheet/</link>
      <pubDate>Thu, 16 Feb 2017 11:53:50 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/16/send-e-mail-with-excel-file-converted-from-spreadsheet/</guid>
      <description>&lt;p&gt;This sample script sends an e-mail with an Excel file exported from Spreadsheet as an attachment file.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;function excelSender() {&#xA;  var sheetID = [Sheet ID];&#xA;  var xlsxName = [Excel file name];&#xA;  var params = {&#xA;    &amp;#34;headers&amp;#34; : {Authorization: &amp;#34;Bearer [Retrieved AccessToken]&amp;#34;},&#xA;    &amp;#34;muteHttpExceptions&amp;#34; : true&#xA;  };&#xA;  var dUrl = &amp;#34;https://www.googleapis.com/drive/v3/files/&amp;#34; + sheetID + &amp;#34;/export?mimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&amp;#34;&#xA;  var xlsxlFile = UrlFetchApp.fetch(dUrl, params).getBlob().setName(xlsxName);&#xA;  MailApp.sendEmail({&#xA;    to: [Mail address],&#xA;    subject: &amp;#34;sample subject&amp;#34;,&#xA;    body: &amp;#34;sample body&amp;#34;,&#xA;    attachments: [xlsxlFile]&#xA;  });&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/170216b.png&#34;&#xA;     alt=&#34;Send E-mail with Excel file converted from Spreadsheet&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Download a CSV File from Spreadsheet Using Google HTML Service</title>
      <link>https://tanaikech.github.io/2017/02/16/download-a-csv-file-from-spreadsheet-using-google-html-service/</link>
      <pubDate>Thu, 16 Feb 2017 10:31:37 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/16/download-a-csv-file-from-spreadsheet-using-google-html-service/</guid>
      <description>&lt;p&gt;Here, I introduce how to download a CSV file from spreadsheet using Google HTML Service.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Using &amp;ldquo;onOpen()&amp;rdquo;, it addes menu for launching a dialog.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/170216a.png&#34;&#xA;     alt=&#34;Download a CSV File from Spreadsheet Using Google HTML Service&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;After launching the dialog, &amp;ldquo;getFileUrl()&amp;rdquo; is launched by pushing a button. &amp;ldquo;getFileUrl()&amp;rdquo; exports a CSV file and outputs download URL.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The CSV file is downloaded by &amp;ldquo;executeDownload()&amp;rdquo;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;u&gt;Please put both HTML and GAS to a GAS project.&lt;/u&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making charts at spreadsheet</title>
      <link>https://tanaikech.github.io/2017/02/13/making-charts-at-spreadsheet/</link>
      <pubDate>Mon, 13 Feb 2017 08:57:58 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/13/making-charts-at-spreadsheet/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/table.png&#34;&#xA;     alt=&#34;Making charts at spreadsheet&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();&#xA; var chart = sheet.newChart()&#xA;    .setChartType(Charts.ChartType.LINE)&#xA;    .asLineChart()&#xA;    .addRange(sheet.getRange(&amp;#39;a1:a21&amp;#39;))&#xA;    .addRange(sheet.getRange(&amp;#39;b1:b21&amp;#39;))&#xA;    .addRange(sheet.getRange(&amp;#39;c1:c21&amp;#39;))&#xA;    .setColors([&amp;#34;green&amp;#34;, &amp;#34;red&amp;#34;])&#xA;    .setBackgroundColor(&amp;#34;black&amp;#34;)&#xA;    .setPosition(5, 5, 0, 0)&#xA;    .setPointStyle(Charts.PointStyle.MEDIUM)&#xA;    .setOption(&amp;#39;useFirstColumnAsDomain&amp;#39;, true)&#xA;    .setOption(&amp;#39;height&amp;#39;, 280)&#xA;    .setOption(&amp;#39;width&amp;#39;, 480)&#xA;    .setOption(&amp;#39;title&amp;#39;, &amp;#39;Sample chart&amp;#39;)&#xA;    .setOption(&amp;#39;hAxis&amp;#39;, {&#xA;      title: &amp;#39;x axis&amp;#39;,&#xA;      minValue: 0,&#xA;      maxValue: 20,&#xA;      titleTextStyle: {&#xA;        color: &amp;#39;#c0c0c0&amp;#39;,&#xA;        fontSize: 20,&#xA;        italic: false,&#xA;        bold: false&#xA;      },&#xA;      textStyle: {&#xA;        color: &amp;#39;#c0c0c0&amp;#39;,&#xA;        fontSize: 12,&#xA;        bold: false,&#xA;        italic: false&#xA;      },&#xA;      baselineColor: &amp;#39;#c0c0c0&amp;#39;,&#xA;      gridlines: {&#xA;        color: &amp;#39;#c0c0c0&amp;#39;,&#xA;        count: 4&#xA;      }&#xA;    })&#xA;    .setOption(&amp;#39;vAxis&amp;#39;, {title: &amp;#39;y axis&amp;#39;,&#xA;      minValue: 0,&#xA;      maxValue: 800,&#xA;      titleTextStyle: {&#xA;        color: &amp;#39;#c0c0c0&amp;#39;,&#xA;        fontSize: 20,&#xA;        italic: false,&#xA;        bold: false&#xA;      },&#xA;      textStyle: {&#xA;        color: &amp;#39;#c0c0c0&amp;#39;,&#xA;        fontSize: 12,&#xA;        bold: false,&#xA;        italic: false&#xA;      },&#xA;      baselineColor: &amp;#39;#c0c0c0&amp;#39;,&#xA;        gridlines: {&#xA;        color: &amp;#39;#c0c0c0&amp;#39;,&#xA;        count: 4&#xA;      }&#xA;    })&#xA;    .setOption(&amp;#39;legend&amp;#39;, {&#xA;      position: &amp;#39;right&amp;#39;,&#xA;      textStyle: {&#xA;        color: &amp;#39;yellow&amp;#39;,&#xA;        fontSize: 16&#xA;      }&#xA;    })&#xA;    .build();&#xA;    sheet.insertChart(chart);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://tanaikech.github.io/img/chart.png&#34;&#xA;     alt=&#34;Making charts at spreadsheet&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>File Upload and Download with File Convert For curl using Drive API</title>
      <link>https://tanaikech.github.io/2017/02/08/file-upload-and-download-with-file-convert-for-curl-using-drive-api/</link>
      <pubDate>Wed, 08 Feb 2017 15:50:52 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/08/file-upload-and-download-with-file-convert-for-curl-using-drive-api/</guid>
      <description>&lt;p&gt;It is necessary to retrieve access token on Google. Scope is as follows.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://www.googleapis.com/auth/drive&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Other mimetypes can be seen &lt;a href=&#34;https://developers.google.com/drive/v3/web/manage-downloads&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;download-and-convert-from-spreadsheet-to-excel&#34;&gt;Download and convert from Spreadsheet to Excel&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -X GET -sSL \&#xA;        -H &amp;#34;Authorization: Bearer [Your access token]&amp;#34; \&#xA;        -o &amp;#34;Excel file name&amp;#34; \&#xA;        &amp;#34;https://www.googleapis.com/drive/v3/files/[File ID]/export?mimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;upload-and-convert-from-excel-to-spreadsheet&#34;&gt;Upload and convert from Excel to Spreadsheet&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -X POST -sSL \&#xA;        -H &amp;#34;Authorization: Bearer [Your access token]&amp;#34; \&#xA;        -F &amp;#34;metadata={ \&#xA;                     name : &amp;#39;[File name on Google Drive]&amp;#39;, \&#xA;                     mimeType : &amp;#39;application/vnd.google-apps.spreadsheet&amp;#39; \&#xA;                     };type=application/json;charset=UTF-8&amp;#34; \&#xA;        -F &amp;#34;file=@[Your Excel file];type=application/vnd.ms-excel&amp;#34; \&#xA;        &amp;#34;https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Sample Array Script for Spreadsheet</title>
      <link>https://tanaikech.github.io/2017/02/08/sample-array-script-for-spreadsheet/</link>
      <pubDate>Wed, 08 Feb 2017 08:50:38 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/08/sample-array-script-for-spreadsheet/</guid>
      <description>&lt;p&gt;This is a Sample Array Script for Spreadsheet. It makes an 2D array filled by strings and number. The strings and number are column strings and row number, respectively.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;However, because this is a sample, the maximum column number is 26.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;function sa(row, col){&#xA;  if (col &amp;gt; 26) return;&#xA;&#xA;  var ar = new Array(row);&#xA;  for(var i = 0; i &amp;lt; row; i++) ar[i] = new Array(col);&#xA;  for (var i = 0; i &amp;lt; row; i++){&#xA;    for (var j = 0; j &amp;lt; col; j++){&#xA;      ar[i][j] = String.fromCharCode(i + 97) + String(j + 1);&#xA;    }&#xA;  }&#xA;  return ar.map(function(x, i){return x.map(function(y, j){return ar[j][i]})});&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When &amp;ldquo;sa(10,10)&amp;rdquo; is given, following array can be output.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Event of onEdit() for Google spreadsheet</title>
      <link>https://tanaikech.github.io/2017/02/07/event-of-onedit-for-google-spreadsheet/</link>
      <pubDate>Tue, 07 Feb 2017 11:03:56 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/07/event-of-onedit-for-google-spreadsheet/</guid>
      <description>&lt;h1 id=&#34;about-event-objects&#34;&gt;About Event Objects&lt;/h1&gt;&#xA;&lt;p&gt;For example, it thinks the situation of input text of &amp;rsquo;test&amp;rsquo; to &amp;lsquo;A1&amp;rsquo; on a sheet.&lt;/p&gt;&#xA;&lt;p&gt;When you use only &amp;lsquo;onEdit(e)&amp;rsquo; without an installing trigger, &amp;rsquo;e&amp;rsquo; has following parameters.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;{authMode=LIMITED, range=Range, source=Spreadsheet, user=, value=test}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In this case, the event cannot send an e-mail because of &amp;lsquo;authMode=LIMITED&amp;rsquo;.&lt;/p&gt;&#xA;&lt;p&gt;When you use &amp;ldquo;onEdit(e)&amp;rdquo; with an installing trigger of &amp;ldquo;Edit&amp;rdquo;, &amp;rsquo;e&amp;rsquo; has following parameters.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;{authMode=FULL, range=Range, source=Spreadsheet, value=test, triggerUid=#####}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In this case, the event can send an e-mail because of &amp;lsquo;authMode=FULL&amp;rsquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>File upload using doPost on Google Web Apps</title>
      <link>https://tanaikech.github.io/2017/02/05/file-upload-using-dopost-on-google-web-apps/</link>
      <pubDate>Sun, 05 Feb 2017 11:40:08 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/05/file-upload-using-dopost-on-google-web-apps/</guid>
      <description>&lt;h1 id=&#34;file-upload-using-html-form-in-gas-project&#34;&gt;File upload using HTML form in GAS project&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Rule&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Following scripts have to be made into a project of Google Apps Script.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Deploy the GAS project as a web application. &lt;a href=&#34;https://developers.google.com/apps-script/guides/web&#34;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;After updated the script, it has to be updated as a new version.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Form.html :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;html&amp;gt;&#xA;  &amp;lt;body&amp;gt;&#xA;    &amp;lt;form&amp;gt;&#xA;      &amp;lt;input type=&amp;#34;file&amp;#34; name=&amp;#34;imageFile&amp;#34;&amp;gt;&#xA;      &amp;lt;input type=&amp;#34;button&amp;#34; value=&amp;#34;ok&amp;#34; onclick=&amp;#34;google.script.run.upload(this.parentNode)&amp;#34;&amp;gt;&#xA;    &amp;lt;/form&amp;gt;&#xA;  &amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;GAS :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;function doGet() {&#xA;  return HtmlService.createHtmlOutputFromFile(&amp;#39;Form.html&amp;#39;);&#xA;}&#xA;&#xA;function upload(e) {&#xA;  var destination_id = &amp;#39;#####&amp;#39;; // Folder ID of destination folder&#xA;&#xA;  // Reference : https://developers.google.com/apps-script/reference/base/blob#getAs(String)&#xA;  // You can use &amp;#39;application/pdf&amp;#39;, &amp;#39;image/bmp&amp;#39;, &amp;#39;image/gif&amp;#39;, &amp;#39;image/jpeg&amp;#39; and &amp;#39;image/png&amp;#39;.&#xA;  var contentType = &amp;#39;image/jpeg&amp;#39;;&#xA;  var img = e.imageFile;&#xA;&#xA;  var destination = DriveApp.getFolderById(destination_id);&#xA;  var img = img.getAs(contentType);&#xA;  destination.createFile(img);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When you set &amp;lsquo;image/jpeg&amp;rsquo; as &amp;ldquo;contentType&amp;rdquo; and upload png file, the uploaded image file is converted to jpeg file and saved it to the destination folder.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Add next row to current row using AWK</title>
      <link>https://tanaikech.github.io/2017/02/05/add-next-row-to-current-row-using-awk/</link>
      <pubDate>Sun, 05 Feb 2017 11:03:30 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/05/add-next-row-to-current-row-using-awk/</guid>
      <description>&lt;p&gt;&lt;strong&gt;File.txt :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;a1&#xA;a2&#xA;a3&#xA;a4&#xA;a5&#xA;a6&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Code :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;awk &amp;#39;{array[NR]=$0} END {for (i in array) {if (i&amp;gt;1) {{print array[i-1]&amp;#34;,&amp;#34;array[i]}}}}&amp;#39; File.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Result :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;a1,a2&#xA;a2,a3&#xA;a3,a4&#xA;a4,a5&#xA;a5,a6&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After the all rows are imported to an array, it shows next row to current row under a condition of row &amp;gt; 1.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Retrieving cells without blank using GAS</title>
      <link>https://tanaikech.github.io/2017/02/03/retrieving-cells-without-blank-using-gas/</link>
      <pubDate>Fri, 03 Feb 2017 10:14:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/02/03/retrieving-cells-without-blank-using-gas/</guid>
      <description>&lt;p&gt;This is a sample script for retrieving cells without blank cells. Figure 1 shows the sample spreadsheet. In this sheet, &lt;u&gt;the row 14 has one space.&lt;/u&gt;&lt;/p&gt;&#xA;&lt;br /&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img src=&#34;https://tanaikech.github.io/img/fig170203a.png&#34;&#xA;     alt=&#34;Retrieving cells without blank using GAS&#34;&#xA;     &#xA;     loading=&#34;lazy&#34;&#xA;     decoding=&#34;async&#34;&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;Fig. 1: Sample spreadsheet.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;br /&gt;&#xA;&lt;p&gt;Data is retrieved as follows.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  var data = SpreadsheetApp&#xA;             .getActiveSpreadsheet()&#xA;             .getActiveSheet()&#xA;             .getRange(&amp;#39;a1:a30&amp;#39;)&#xA;             .getValues();&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;1-retrieving-cells-with-spaces-and-no-blank-cells&#34;&gt;1. Retrieving cells with spaces and no blank cells.&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  var Result = [i for each (i in data)if (i)].join(&amp;#39;&amp;#39;);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Result : Hello World&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>One Liner Code for Netatmo</title>
      <link>https://tanaikech.github.io/2017/01/11/one-liner-code-for-netatmo/</link>
      <pubDate>Wed, 11 Jan 2017 15:00:01 +0900</pubDate>
      <guid>https://tanaikech.github.io/2017/01/11/one-liner-code-for-netatmo/</guid>
      <description>&lt;p&gt;I made One Liner Code to retrieve data using Netatmo API. There are 2 ways. One is for windows dos. Another is for unix bash. Requirement tools are curl and jq.&lt;/p&gt;&#xA;&lt;h3 id=&#34;windows-dos&#34;&gt;windows dos&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;gt; setlocal &amp;amp; curl -s -d &amp;#34;grant_type=password&amp;amp;client_id=&amp;#39;#####&amp;#39;&amp;amp;client_secret=&amp;#39;#####&amp;#39;&amp;amp;username=&amp;#39;#####&amp;#39;&amp;amp;password=&amp;#39;#####&amp;#39;&amp;amp;scope=read_station&amp;#34; &amp;#34;https://api.netatmo.net/oauth2/token&amp;#34; | for /f &amp;#34;usebackq tokens=*&amp;#34; %a in (`jq -r &amp;#34;.access_token&amp;#34;`) do @set a=&amp;#34;%a&amp;#34; | curl -s -d &amp;#34;access_token=%a&amp;amp;device_id=&amp;#39;#####&amp;#39;&amp;#34; &amp;#34;https://api.netatmo.net/api/getstationsdata&amp;#34; &amp;gt; dat.txt &amp;amp; for /f &amp;#34;usebackq tokens=*&amp;#34; %b in (`jq -r &amp;#34;.body.devices[0].dashboard_data.Temperature&amp;#34; dat.txt`) do @set b=&amp;#34;%b&amp;#34; | echo: &amp;amp; set /p nb=Indoor: Temperature %b [degree C],&amp;lt;nul &amp;amp; for /f &amp;#34;usebackq tokens=*&amp;#34; %b in (`jq -r &amp;#34;.body.devices[0].dashboard_data.Humidity&amp;#34; dat.txt`) do @set b=&amp;#34;%b&amp;#34; | set /p nb=Humidity %b [%],&amp;lt;nul &amp;amp; for /f &amp;#34;usebackq tokens=*&amp;#34; %b in (`jq -r &amp;#34;.body.devices[0].dashboard_data.Pressure&amp;#34; dat.txt`) do @set b=&amp;#34;%b&amp;#34; | set /p nb=Pressure %b [hPa]&amp;lt;nul &amp;amp; for /f &amp;#34;usebackq tokens=*&amp;#34; %b in (`jq -r &amp;#34;.body.devices[0].modules[0].dashboard_data.Temperature&amp;#34; dat.txt`) do @set b=&amp;#34;%b&amp;#34; | echo: &amp;amp; set /p nb=Outdoor: Temperature %b [degree C],&amp;lt;nul &amp;amp; for /f &amp;#34;usebackq tokens=*&amp;#34; %b in (`jq -r &amp;#34;.body.devices[0].modules[0].dashboard_data.Humidity&amp;#34; dat.txt`) do @set b=&amp;#34;%b&amp;#34; | set /p nb=Humidity %b [%]&amp;lt;nul &amp;amp; del dat.txt&#xA;&#xA;Indoor: Temperature 12 [degree C],  Humidity 56 [%],  Pressure 1000.2 [hPa]&#xA;Outdoor: Temperature 12.3 [degree C],  Humidity 56 [%]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;unix-bash&#34;&gt;unix bash&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ curl -s -d &amp;#34;grant_type=password&amp;amp;client_id=&amp;#39;#####&amp;#39;&amp;amp;client_secret=&amp;#39;#####&amp;#39;&amp;amp;username=&amp;#39;#####&amp;#39;&amp;amp;password=&amp;#39;#####&amp;#39;&amp;amp;scope=read_station&amp;#34; &amp;#34;https://api.netatmo.net/oauth2/token&amp;#34;|curl -s -d &amp;#34;access_token=`jq -r &amp;#39;.access_token&amp;#39;`&amp;amp;device_id=&amp;#39;#####&amp;#39;&amp;#34; &amp;#34;https://api.netatmo.net/api/getstationsdata&amp;#34;|jq -r &amp;#39;&amp;#34;\nIndoor: Temperature &amp;#34;+(.body.devices[0].dashboard_data.Temperature|tostring)+&amp;#34; [degree C], Humidity &amp;#34;+(.body.devices[0].dashboard_data.Humidity|tostring)+&amp;#34; [%], Pressure &amp;#34;+(.body.devices[0].dashboard_data.Pressure|tostring)+&amp;#34; [hPa]\nOutdoor: Temperature &amp;#34;+(.body.devices[0].modules[0].dashboard_data.Temperature|tostring)+&amp;#34; [degree C], Humidity &amp;#34;+(.body.devices[0].modules[0].dashboard_data.Humidity|tostring)+&amp;#34; [%]&amp;#34;&amp;#39;&#xA;&#xA;Indoor: Temperature 12 [degree C], Humidity 56 [%], Pressure 1000.2 [hPa]&#xA;Outdoor: Temperature 12.3 [degree C], Humidity 56 [%]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you want to use these One Liner Codes, you can use following code. Please replace &amp;ldquo;#####&amp;rdquo; to yours.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Library - souwapy</title>
      <link>https://tanaikech.github.io/2016/10/30/python-library-souwapy/</link>
      <pubDate>Sun, 30 Oct 2016 13:38:29 +0900</pubDate>
      <guid>https://tanaikech.github.io/2016/10/30/python-library-souwapy/</guid>
      <description>&lt;p&gt;This &amp;ldquo;souwapy&amp;rdquo; is a library for summing array elements with high speed by new algorithm (&lt;a href=&#34;https://tanaikech.github.io/2016/10/13/improved-algorithms-for-summation-of-array-elements/&#34;&gt;Pyramid method&lt;/a&gt;). The speed is faster than csv and panbdas module of python and v8 engine of node.js. The souwapy module is 2.3 and 3.1 times faster than csv and pandas module, respectively. This was really surprised me. It was found that the theory was correct.&lt;/p&gt;&#xA;&lt;p&gt;At first, I have created this theory for Google Apps Script. But recently I had to use large data and output a csv file on python. So I made this library. Additionally, I had wanted to know how to public own library to PyPI before. This chance was good for me. If this library is helpful for other people, I&amp;rsquo;m glad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Element&#39;s Duplicate Number in Array at Python</title>
      <link>https://tanaikech.github.io/2016/10/21/elements-duplicate-number-in-array-at-python/</link>
      <pubDate>Fri, 21 Oct 2016 12:29:25 +0900</pubDate>
      <guid>https://tanaikech.github.io/2016/10/21/elements-duplicate-number-in-array-at-python/</guid>
      <description>&lt;p&gt;Suddenly I had to need this.&lt;/p&gt;&#xA;&lt;p&gt;This script can get the duplicate number of each element in array at Python. In this script, the duplicate number of each element is obtained and sorted by the duplicate number. This was expressed by the comprehension.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;data = [&amp;#39;a&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;c&amp;#39;, &amp;#39;d&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;c&amp;#39;, &amp;#39;d&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;c&amp;#39;, &amp;#39;b&amp;#39;]&#xA;result = sorted({i: data.count(i) for i in set(data)}.items(), key=lambda x: x[1], reverse=True)&#xA;print(result)&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt; [(&amp;#39;b&amp;#39;, 4), (&amp;#39;c&amp;#39;, 3), (&amp;#39;d&amp;#39;, 2), (&amp;#39;a&amp;#39;, 1)]&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>CoffeeScript</title>
      <link>https://tanaikech.github.io/2016/10/20/coffeescript/</link>
      <pubDate>Thu, 20 Oct 2016 14:34:59 +0900</pubDate>
      <guid>https://tanaikech.github.io/2016/10/20/coffeescript/</guid>
      <description>&lt;p&gt;I may be slow a bit, but I could notice much convenience of CoffeeScript just now. I didn&amp;rsquo;t know that scripts of GAS can be made by CoffeeScript up until now. This will have me work more effectively! :D&lt;/p&gt;</description>
    </item>
    <item>
      <title>GAS Library - SOUWA_GAS - Effects on Optimized Codes of Pyramid Method</title>
      <link>https://tanaikech.github.io/2016/10/13/gas-library-souwa_gas-effects-on-optimized-codes-of-pyramid-method/</link>
      <pubDate>Thu, 13 Oct 2016 15:57:20 +0900</pubDate>
      <guid>https://tanaikech.github.io/2016/10/13/gas-library-souwa_gas-effects-on-optimized-codes-of-pyramid-method/</guid>
      <description>&lt;center&gt;&#xA;Kanshi TANAIKE&#xA;&lt;/center&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;#ref1&#34;&gt;I have already reported that the pyramid method is one of very effectively algolithms for summing string elements in an array using Google Apps Script (GAS).&lt;/a&gt; This report describes the adaptability of the pyramid method to any languages except for GAS. c++ (g++), Go, Java, Javascript on Node.js, Python and Ruby were chosen as the sample languages. In those languages, there are languages which have the distinctive commands for summing the array elements. In this report, &amp;ldquo;+&amp;rdquo; operator as a standard command and a special command for each language were used. For c++ (g++), Javascript on Node.js and Python which have no distinctive commands for summing the array elements, only &amp;ldquo;+&amp;rdquo; operator was used. For others, both &amp;ldquo;+&amp;rdquo; operator and each special command such as &amp;ldquo;[]byte&amp;rdquo;, &amp;ldquo;StringBuilder&amp;rdquo; and &amp;ldquo;&amp;laquo;&amp;rdquo; were used. For languages without the distinctive commands for summing, the pyramid method made us show some interesting phenomena. It was found that the pyramid method shows a good effect on only the specific language. It was found that &amp;ldquo;+&amp;rdquo; operator had been optimized for g++ and Node.js. &amp;ldquo;+&amp;rdquo; operator of Python was corresponding to theoretical results. This means that &amp;ldquo;+&amp;rdquo; operator of Python is not optimized. On the other hand, for languages with the distinctive commands for summing, it was found that the distinctive commands is incompatible to the pyramid method. These results made us show the possibility of visualization for the optimized codes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improved Algorithms for Summation of Array Elements</title>
      <link>https://tanaikech.github.io/2016/10/13/improved-algorithms-for-summation-of-array-elements/</link>
      <pubDate>Thu, 13 Oct 2016 14:39:34 +0900</pubDate>
      <guid>https://tanaikech.github.io/2016/10/13/improved-algorithms-for-summation-of-array-elements/</guid>
      <description>&lt;center&gt;&#xA;Kanshi TANAIKE&#xA;&lt;/center&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;I considered an efficient algorithm for summation of array elements. All elements in an array are string. When those elements are summed using scripts, a standard method is to add each element in order. If the script is run without any optimize, the process becomes gradually sluggish, because the total amount of active data during the summation process is proportional to the square of the number of array elements. This leads directly to the high process-cost. Such phenomenon notably appears at Google Apps Script (GAS). This report says about the solution of this problem using a new algorithm of a pyramid method. The pyramid method achieves that the total amount of active data increases proportional to the linear of the number of array elements. By this, the processing time becomes much shorter than that of the process using the standard method. The pyramid method achieved the process-cost reduction of $99.7%$ compared with the standard method at GAS. I realized again that new discoveries are hidden into the familiar scenes of every-day life.&lt;/p&gt;</description>
    </item>
    <item>
      <title>1stpost</title>
      <link>https://tanaikech.github.io/2016/09/18/1stpost/</link>
      <pubDate>Sun, 18 Sep 2016 15:02:15 +0900</pubDate>
      <guid>https://tanaikech.github.io/2016/09/18/1stpost/</guid>
      <description>&lt;p&gt;This is a first post. Today this blog was launched. I would like to introduce some of my experimental results. I&amp;rsquo;m Japanese. So I&amp;rsquo;ll use both English and Japanese here.&#xA;Thank you.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
