Tuesday, September 30, 2025

Pivot Expense Split: Posting Offline Transactions at Reconnection

Google Sheets mobile + offline mode + installable onEdit triggers is a known and tricky behavior. Here’s a breakdown of why offline to online sometimes get two triggers and sometimes none:

๐Ÿ” 1. Why it happens

a. Offline edits don’t fire any triggers immediately

When offline, the app records the edits locally; installable triggers (like onEdit(e)) only run on the server.

So while offline → no trigger.

b. When reconnecting

When the mobile app resyncs: 

  • Sometimes Google merges the edits into one sync event → fires one onEdit trigger per edited cell.
  • Sometimes it batches multiple cell changes → causing multiple triggers (e.g., one per cell).
  • Occasionally, the sync process is treated as a programmatic update (not user edit) → no onEdit at all.

This depends on:

  • How long the sheet stayed offline.
  • Whether the same range got multiple changes.
  • Connection stability and Google server sync timing.


๐Ÿงช 2. Observed patterns (tested behavior)

Scenario Offline duration Action                         Result

Short offline (few seconds) Small edit (1 cell)         Usually 1 onEdit

Long offline (many edits) Multiple cells                 Often no trigger or 2+ triggers

Reopen sheet after being         Edits in different areas    Sometimes fires all at once or none

fully closed offline

๐Ÿ•’ 3. When sync happens automatically

Offline edits made on the mobile app are synced when all of the following conditions are true:

1. Internet connection restored

  • The device must be connected to the internet (Wi-Fi or mobile data).
  • Sync typically starts within a few seconds to a few minutes after the connection stabilizes.
2. Google Sheets app is active or in background
  • The app must be open on the sheet, or at least allowed to run in the background.
  • If the app was closed or background activity is restricted (by battery saver, etc.), sync waits until the app is reopened.
3. Google account signed in & online
  • The account used for editing must still be logged in and authenticated.
  • If sign-in expired (common after long offline periods), sync waits until you reauthenticate.
4. No sync conflict

  • If someone else has also edited the same range while you were offline, Sheets may delay syncing until it resolves the conflict (which can cause the “Version conflict” prompt).
๐Ÿ”4. Implication for add-ons or triggers

Installable triggers like onEdit, onChange, or time-based triggers see the updates only after the sync upload completes.

That’s why offline edits sometimes trigger two onEdit events, or none at all, depending on how Google merges them when reconnecting.

⚙️5.  Pivot Expense Split Enhancement

Use an onChange(e) installable trigger which fires when the structure or content of the sheet changes, even after sync. It will trigger once per batch sync instead of per cell. The following is scripted to post offline input at reconnection.

function onChange(e) {

  if (e.changeType === 'EDIT') {

    // handle sync edits here

  }

}

⚠️ It doesn’t give e.range like onEdit — only that something changed. 

Wednesday, September 10, 2025

Pivot Expense Split: Posting Timeout

Previously, Pivot Expense Split relied on a simple Google onEdit trigger, which only runs for up to 30 seconds. That wasn’t enough to handle offline input when device came back online.


Now, Pivot Expense Split uses installable triggers for longer runtime and will create another triggers until all offline transactions are fully posted. This means you won’t have checkboxes remain in Input tab when back to online.

The use of installable trigger requires new permission which has been reviewed and approved by Google today. When you run the add-on, Google will prompt you the new permission for your authorization.


Wednesday, August 27, 2025

To-do List Plugin: Logging the Date When the User Checks the Box to Mark a Task as Done

Inside the TDL log, Google’s history records the date when a task was logged. For users who want to analyze trends, it is more useful to store this date in its own column. Therefore, the date when the user checks the box to mark a task as done is now added to the log.

Please update your TDL log header as follows:


Date – the original task date
Repeat On – the updated task date based on the frequency code
Completion – the date when the user checked the box to mark the task as done

Saturday, August 2, 2025

Comfort Attendance: Support for Multiple Attendance Statuses

You can configure custom statuses starting with the default Absent and Present. Additional statuses like Picked Up can be added to suit your needs.

Clicking a name will cycle through the statuses and loop back to the beginning. Alternatively, you can open a dropdown list to select a specific status.


You can fully customize the status code, label, color, and icon to fit your needs.

Each status has the following attributes, listed in quotes and separated by commas:

  • Valid code on the sheet

  • Label, color, and icon, which are displayed on the web app page for that status code



The web app will update Google attendance sheet and dashboard accordingly.




Setup instructions and details in Comfort Attendance Setup > Option 2.


Sunday, July 6, 2025

One Link Sign-up: Enhanced Web App Setup Flow

The Set Up Web App function has been enhanced to support both Automatic and Manual deployment options.

Automatic Deployment: Quickly deploy with default settings for a fast and hassle-free setup.

Manual Deployment: For technical users who want full control over deployment configurations.

This enhancement gives you flexibility to choose the method that best fits your needs.



Friday, July 4, 2025

Comfort Attendance: Enhanced the Web App Setup Flow

The Set Up Web App function has been enhanced to support both Automatic and Manual deployment options.

Automatic Deployment: Quickly deploy with default settings for a fast and hassle-free setup.

Manual Deployment: For technical users who want full control over deployment configurations.

This enhancement gives you flexibility to choose the method that best fits your needs.




Tuesday, June 10, 2025

To-do List Plugin: Supports the "Format → Convert to Table" Feature

๐Ÿ†• To-do List Plugin Now Supports the "Format → Convert to Table" Feature

The plugin now works seamlessly with Google Sheets' "Convert to table" format.

  • You can add a new table row by clicking the ➕ icon.

  • As a result, an extra blank row is no longer required.

  • If you prefer not to have a blank row automatically inserted, simply uncheck "Insert task when blank is filled" in the configuration sidebar below.