Combining multiple cells from different rows into a single text field which can be copied

Hello,

I am hoping someone can help me with, what I hope, isn’t too complicated a request?

I am using AppSheets to create an availability calendar and I want to include a function where I can easily create a simple text list of available dates that I can then copy from the app and send to clients.

My backend spreadsheet looks a bit like the example below:

Date Status Location Client
01/01/2026 Available
02/01/2026 Busy London WinTech
03/01/2026 Busy London WinTech
04/01/2026 Available
05/01/2026 Busy Paris DisplayPres
06/01/2026 Available

I would like to have a tab in my AppSheets app which would display all the available dates and the status. Ideally with a line break between each one as below:

01/01/2026 - Available

04/01/2026 - Available

06/01/2026 - Available

However if it needs to come out as a single line list, as below, that is also acceptable:

01/01/2026 - Available, 04/01/2026 - Available, 06/01/2026 - Available

The most important bit is that it is easy to select and copy into an email

Thanks in advance

Do you really need to annotate each date with “- Available”?? Alternatively, you could add a Virtual Column named “Available Dates” and simply show a list of dates.

Here is what I would recommend:

  1. In the app itself, show the Available Dates as rows in an Inline table instead of a list values - one to each line. That way a user can tap on any available Date row to go directly to a view for that row and take whatever action they might need to.

2)a) If you need to use copy/paste then create a separate Virtual Column field (as mentioned above) for that purpose. This field could be just the list of comma separated list of dates OR you can create an “Available Label” column on each row that creates your annotated date = “01/01/2026 - Available”. The expression would pull in the list of labels instead of the dates.

2)b) If the copy/paste is to generate emails, why not have AppSheet automation send those emails for you? Then you can create a pre-formatted email body that fills in the details likely without the need for extra columns introduced. You can use templates for the email body.

Let me know if there are questions or more details needed…otherwise…

I hope this helps!

1 Like

Hi,

Thanks for the response.

I believe I have already created what you describe in point 1. I have created a "public view” for the app which only shows these fields. Below is a screen grab to show the output.

Landing view:

Month view:

For some uses this is exactly what I want, as it means I can send a link to clients and they can open the page to view all availability across every month.

In other circumstances, when clients ask for availability for a certain month or two, I need to be able to just copy data out of the app and paste it into an email, so they don’t have any extra steps to get to the information.

Your second suggestion sound like the most appropriate one, Im just unsure about the best way to extract all the available dates, within a month, into a single text field so it can be copied from the app and pasted into an email. I can make a virtual column with the correct field, and display that data, as below, I was just looking for some advice on how to have it in a text field where the values can be selected and copied.

I hope that makes some sense?

Thanks again for your help

I see. The question, for me, is WHERE in the app would you have this field that shows the list to be copied? Once you have decided that then define the column as LONGTEXT.

I’ll assume you have used a label column to annotate the date.

You can then use an expression like this:

SUBSTITUTE(SELECT(Dates Table[Available Label column], [Status] = “Available”), 
" , ","
")
        

NOTE: replace table and column names to match your data.

The SELECT returns a comma separated list of the “Available” labels. The SUBSTITUTE takes advantage of known AppSheet list definement - <> - and replaces that with a newline to place each on a separate line. To insert a newline, we use a quote, press enter/return and then insert another quote.

I hope this helps!!

1 Like

Hi,

Thankyou again for this, it does help.

I assume when you say “WHERE in the app you would like to have this field” you mean, in which datasource? I was hoping to have it handled on the app side, without having to create an additional datasource. However I realise that might not be how AppSheet is designed to operate.

I have created another sheet/tab in the Google sheets doc where this can be stored however I am having a problem with the formula. When I try and compare a text field (in this case the Status field) to a string (“Free day”) it says they are of incompatible type List and Text. I have tried casting the column value to a text type but then the query return blank.

In the image below the “Sheet2” table contains all the main data and the “FreeDays” table has been created to hold a string / long sting containing the CSV string of all available dates in each month.

I would expect this formula to select all the values from the start date column in the main table, where the status = “free day” and put a CSV string into the Free Days column of the FreeDays table?

Thanks again for your help

Correc!. Every value that is either displayed or stored must be backed by a table and column. For data you DO NOT wish to store in the datasource, you can use a Virtual Column as a temporary store or display column.

I see what you have inserted with your “FreeDays” table. That’s exactly how I would handle it EXCEPT I would make the Free Days column a Virtual Column. That way it is automatically re-calculated without you needing to do anything else.

Considering that you have your free days represented by YEAR and MONTH, I would now make the expression like this:

select(Sheet2[Start Date],
AND( YEAR([Start Date] = [_THISROW].[Year],
MONTH([Start Date] = [_THISROW].[Month],
[Status] = “Free Day”))

Obviously, this expression would be placed in the “Free Days” column and would get calculated for each FreeDays row.

NOTE: The issue with your previous expression was that you referenced that table twice. You need to do so only once at the beginning of the SELECT() function where you specify the return value. That sets context for the rest of the expression.

I hope this helps!!

2 Likes

Hi,

Perfect, thankyou for this!

In the “Free Days” sheet I manually entered the month as a number and the year as a number so the table looks like this:

Month Year FreeDates
1 2026
2 2026
3 2026
4 2026
5 2026
6 2026
7 2026
8 2026
9 2026
10 2026
11 2026
12 2026

I then created a virtual column in Sheet2 called [AvailableDayAndStatus] which joins the start date and the status to create a nice, readable output.

For the [FreeDates] column in the “Free Dates” sheet I used a virtual column in which I used your formula:

select(Sheet2[AvailableDayAndStatus],
AND( YEAR([Start Date]) = [_THISROW].[Year],
MONTH([Start Date]) = [_THISROW].[Month],
[Status] = “Free Day”))

That returned a CSV string as expected and I then used the SUBSTITUE function to add in the line breaks:

SUBSTITUTE(
(CONCATENATE(select(Sheet2[AvailableDayAndStatus],
AND( YEAR([Start Date]) = [_THISROW].[Year],
MONTH([Start Date]) = [_THISROW].[Month],
[Status] = “Free Day”))))," , “,”
")

On the UI side I created a new table view which uses the data from the “FreeDays” sheets and formatted the [month] and [year] values so the landing page looks like this

and when you click down into each month you get a simple view which only displays the [FreeDates] values like this which can then be selected and copied as needed:

Thanks again for all your help!

2 Likes

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.