You can achieve what you want by saving your table in CSV format. If your city data is in shapefile format, you can export it to CSV by right-click the city layer in the table of content -> Save as -> Select CSV under format
, and choose Default
under Geometry tab
if you don't want to the X and Y coordinates of the City point data, as you can see below:

The next step is to give the City data an ID for each row. You can do this in QGIS by adding a column with name ID update the ID field using the expression $id
, or you can open the CSV file in Excel and add a column ID and fill it with a sequence number (1 -50), and save the CSV.
In QGIS, drag and drop the CSV table into the QGIS project, and in the print composer click on Add attribute table
:

Here is the real work. You can control the number of rows to show under Maximum rows
and you can put 25
, but in this example I put 40
, and check Filter with
to show only the first 25 rows in your CSV using the expression:
"ID" >= 1 AND "ID" < 26
,
You can also control the font size and type and do whatever you want. The attribute property has a long list of options to control the appearance of your table.
Now, repeat the previous step by clicking on Add attribute table
, using Maximum rows
with 25
rows and Filter with
to show the next 25 rows in your CSV using the expression:
"ID" >= 26 AND "ID" < 51
Here is the output (But I am using different row numbers):

If you don't wont to show the ID column in the layout, you can click on Attributes -> Select ID row -> Red Minus
to remove the ID from the attribute table. It will not affect expression in the Filter with

Here is the output without ID columns:
