I have a point layer representing sites where data was collected. The data was edited and stored in an Excel spreadsheet (CSV). I needed the data to be joined to the sample sites. I followed the steps mentioned here: Joining data from Excel to attribute table in QGIS without creating duplicates? And it worked. However, when I attempted to load the same layer in a different project, the data from the spreadsheet was not there. It seems that the joined data was not permanently added to the attribute table of the shapefile. Is it possible to make these additions from the spreadsheet permanent to the shapefile?
The join is only permanent within the project you did the join in; basically the attributes are just linked and the link information is stored in the project file (.qgs or .qgz). If you want to hardcode the joined attributes in a layer, you need to export the joined layer as a new file via right clicking on that layer and choosing export -> save features as. Note that if you do so and change data in your excel file, the hardcoded attributes in the join-layer do not get updated any longer, they will keep their values they had when you saved the file.
Alternatively you can also run
Join attributes by field value from processing toolbox which automatically generates a new layer (be careful: the output is temporary by default. You will loose it when closing QGIS. So you also need to save this one to your harddisk)
Keep Shapefile limitations in mind! Fieldnames can have a maximum length of only 10 characters. I suggest to use another file format like Geopackage for example. If you are required to save it as Shapefile, you need to rename the fieldnames. To do this you can run
refactor fields from processing toolbox, give the fields a new name with max. 10 characters and save the output of this tool as Shapefile.