Allow users to customize column visibility and order in AppSheet Table Views (possible via userscript?)

Hello everyone,

I’m working with AppSheet and ran into a usability limitation with Table Views. Currently, it seems that the developer must define the column order and which columns are visible, and the end user cannot easily customize this.

In many data-heavy apps, users often want to:

  • Hide columns they don’t need

  • Reorder columns depending on their workflow

  • Save their own preferred layout

From what I understand, AppSheet does not currently support this natively for end users.

Since the AppSheet web interface is rendered as a standard web application (HTML/JavaScript in the browser), I started wondering if a client-side workaround might be possible.

For example, something like:

  • a userscript (using tools like Tampermonkey)

  • a bookmarklet

  • or even a browser extension

The idea would be to:

  1. Read the table headers after the page loads

  2. Allow the user to hide or reorder columns

  3. Save the preferences (for example in localStorage)

  4. Reapply them automatically when the table view loads again

However, since AppSheet behaves like a single-page application, the DOM changes dynamically, which makes me unsure how reliable this approach would be.

So I wanted to ask the community:

  • Has anyone implemented something like this before?

  • Are there known workarounds to allow per-user column customization in Table Views?

  • Is there any supported way within AppSheet to approximate this behavior?

Any insights, experiences, or examples would be greatly appreciated.

Thanks!

7 Likes

Not possible.

3 Likes

I agree with @Steve this is not possible at the column level.

The only way to work around this is if there are a FINITE set of views that would satisfy your users needs. You could then specify which View the user is presented.

For example, let’s say there are 6 column combinations your users are most interested in. You could create 6 specific views each with their own set of columns and order. You could then provide a configuration that allows the user to determine which view they’d like to see or could determine this automatically from, say, a user assigned role. In each view, the Show-If property would be implemented to show/hide the view based on the determining criteria.

I hope this helps!!

4 Likes

I guess the user preferences to hide or show some columns of a tabel and that table views is app, could be saved in a user table or user settings.

But no way of reordering the columns

1 Like

Unfortunately not. We have no way of implementing a user specified condition that would show or hide a column. We can only show or hide row values - not the column itself.

3 Likes

I did that, but the header is always displayed; only the data is hidden. This seems to me like a relevant implementation for the system. See, if we hide the data, why occupy space in the grid with just the column?

You’re right,thanks,

It only works in detail views

1 Like

Rich-text column that you can format to an extent with whatever data you might want displayed can accomplish this.

It’s crude and limited, eg. Still no right align

But its the work around i specifically use for details screens.

Honestly ive done vibe coding over the past 2 months and have a read only app that fills this gaping appsheet void which is customizability.

I just need a few more months and il have a safe enough backend for concurrency / caching / storage etc that can replace the appsheet saas layer.

Tangent, coding custom frontends to integrate with appsheet api basics was intimidating and time consuming. Claude code trivialized this, and eventually…

2 Likes

Which in one way pisses me off that the appsheet team cant simply claude code in features just a bit faster, or at least prototype them in

2 Likes

No kidding!

1 Like

I didn’t understand

I was replying to @ktsmediaprod.

Привет! Твоя идея со скриптами понятна, но в AppSheet есть более элегантный способ решить это через State-based Governance (Управление на основе состояний). Вместо того чтобы бороться с HTML, мы внедрим слой логики, который будет нормализовать отображение под конкретного пользователя.

1. Тезис: Проблема «Жесткой структуры»

Разработчик определяет порядок, юзер страдает от избыточности — это «частотный шум», который мешает работе.

2. Антитезис: Решение через User Settings (RO2-уровень)

Вместо внешней достройки (extension), используй внутренний механизм настроек. Это позволит пользователю самому стать «рулем» (rudder) своего интерфейса.

Шаг А: Видимость (Снятие дискретности)

* В User Settings создай колонку Selected_Columns (тип EnumList, Base type Token).

* Впиши туда названия всех доступных столбцов.

* Для каждого столбца в основной таблице в поле Show? пропиши формулу:

IN(“Имя_Столбца”, USERSETTINGS(“Selected_Columns”))

Это мгновенно убирает лишние меридианы данных, оставляя только нужные.

Шаг Б: Порядок (Синхронизация потока)

Изменение порядка в AppSheet сложнее, но решается через «слоты» (динамические виртуальные столбцы).

* Создай в User Settings поля: Slot_1, Slot_2, Slot_3… (тип Enum, список имен столбцов).

* В основной таблице создай Виртуальные Столбцы Dynamic_1, Dynamic_2…

* В формулу Dynamic_1 вставь логику переключения:

SWITCH(USERSETTINGS(“Slot_1”),

“Цена”, [Price],

“Дата”, [Date],

“Статус”, [Status],

“”)

Теперь пользователь сам назначает, какой физический параметр «течет» через первый, второй или третий слот видимого представления.

3 Likes

A very advanced approach. It has complexities, but is worth exploring if you’re ambitious.

4 Likes

Regarding visibility, in a table view, doing this will only make the data disappear; however, the header will remain visible, occupying the space in the table grid. Correct?

1 Like

Technically, yes, but you can minimize its appearance by setting the column’s Display Name or clever use of an inline action.

3 Likes

@Ngoi_Sigma

If I understand @Ngoi_Sigma ‘s post, I don’t think the approach with UserSettings() will work at all. I had the same thought and actually tested a small use case in a test app before I responded above.

Here are those results:

Hiding the column Val 1

Showing the column of Val 1

The only way to COMPLETELY remove a column in a table view is:

  1. Not include the column in the column list in the first place - we cannot do this conditionally.
  2. Uncheck the Show property - removes the column from ALL views AND we cannot do this conditionally.

Setting expressions in the Show_IF that result in FALSE is NOT the same as unchecking the Show property altogether. An expression resulting in FALSE will only hide the row values for the affected rows. If it is FALSE for ALL rows we WILL be left with column with its column header displayed in the table view that simply shows no row values.

5 Likes

_Per Use Settings (User Settings) column

  • Name: Display 1
  • Valid if:
    LIST(
      "Source 1",
      "Source 2",
      ...,
      "Source N"
    )
    
  • Required?: OFF

Main table virtual column

  • Name: Display 1
  • App formula:
    SWITCH(
      USERSETTING("Display 1"),
      "Source 1", TEXT([Source 1]),
      "Source 2", TEXT([Source 2]),
      ...,
      "Source N", TEXT([Source N]),
      ""
    )
    
  • Required?: OFF
  • Display name:
    IF(
      ISNOTBLANK(USERSETTING("Display 1")),
      USERSETTING("Display 1"),
      " "
    )
    
5 Likes

Thank you. Thank you. This is truly a systemic development. It’s worth applying; it’s easier to grasp, in various practical examples…

2 Likes

Уважаемый Willow Mobile Systems,

Благодарю Вас за проведение теста и демонстрацию технического ограничения платформы. Я понимаю Вашу точку зрения о том, что использование выражения Show_IF с UserSettings() оставляет заголовок столбца видимым, если оно возвращает FALSE для всех строк, и что это не соответствует цели полного удаления столбца.

Но делая вывод, о том что «подход с UserSettings() не сработает вообще», Вы, кажется, слишком сужаете изначальную идею. «Продвинутый подход», о котором шла речь, не сводится исключительно к самому простому и очевидному методу с Show_IF. Речь идет о поиске более сложного обходного пути для реализации пользовательской настройки видимости (возможно, через динамические View или другими методами), которая позволила бы достичь именно полного исчезновения.

Ваш тест полезен как предупреждение о неработоспособности простейшего решения, но не дает основания отвергать всю концепцию, которая, возможно, изначально предполагала более сложное, многоэтапное решение…

С уважением…

1 Like