whether to use Craft or not?
Craft is using PHP and MySQL. What it gives you is a framework where a lot of the difficult stuff is already covered. Things like content modelling, user administration, security, etc is already done.

In addition there is a good plugin environment that can help fill in gaps to required functionality.

Of course, you can also extend it as you wish to add even more custom functionality.

For your particular use case I'd say Craft is a very good fit. You wouldn't need to be concerned with building an administration interface and the data you wish to store can be easily modelled.

Since your client wants to keep the spreadsheets then a plugin like FeedMe would be brilliant. You can set up an import in FeedMe and have it pull in the data from the spreadsheet using a cronjob or when your client wants to run an update. She'd just need to click a button. The data from the spreadsheet would be imported and used to create new, or update existing, content entries.

You might find that given Craft's really nice control panel she would also find that it's easier to enter data directly than follow the spreadsheet->import process.

So yes. Craft would be a very good fit.

Edited in light of your comment/question

You don't need to create your own database tables or write your own queries. That is what Craft is doing for you.

Craft is extremely flexible in that it will allow you to model your content pretty much however you wish. This data model is then stored within Craft's own database schema and content is written/read (by Craft) using the Yii/Yii2 PHP framework. You would then use the templating language (Twig) to create a front-end for the website with no need to use PHP at all.

So, let's say you had a Section of entries for Blacksmiths. Each Blacksmith is an entry, with whatever fields you wish stored within them. 

Let's assume you want to list out all of the Blacksmith's stored in the Blacksmiths section to create an index.

You might do that within your template with Twig like so:

{% set blacksmiths = craft.entries.section('blacksmiths').orderBy('title').all() %}


This would give you an iterable object named 'blacksmiths' that you could loop over to output the content you want (taking a rough version of your actual listing page).

&lt;table&gt;
    {% for blacksmith in blacksmiths %}
     &lt;tr&gt;
        &lt;td&gt;{{ blacksmith.surname }}&lt;/td&gt;
        &lt;td&gt;{{ blacksmith.firstname }}&lt;/td&gt;
        &lt;td&gt;{{ blacksmith.trade }}&lt;/td&gt;
        &lt;td&gt;{{ blacksmith.year }}&lt;/td&gt;
        &lt;td&gt;{{ blacksmith.notes }}&lt;/td&gt;
      &lt;/tr&gt;
    {% endfor %}
&lt;/table&gt;


If you wanted to alter precisely which blacksmith entries to retrieve you would include some additional criteria in your initial query. You don't need to worry about joins because the data has been stored within Craft's schema and Craft handles any criteria or relations that are required.