You are right, the body field has rich-text
as a data type that is is not supported in calculated field formulas.
So , if you need to create a new field that will hold summary data from body field , try to Create simple custom workflow via SharePoint designer, and use Extract String from start of string
and update list item
action as the following :
- In your list add Summary Body field that will hold the summary data 140 character,
- Open SharePoint Designer > click on Workflow > from the above ribbon > select - List Workflow And select your Blog List.
- From the Above Ribbon, > Action > select String from start of string`

Set the number of character that you need (140), select body field , and set it at variable.
Then add update list item
action to update the summary body field from this variable
Workflow should look like

But if you need to customize Blog home page to show in summery with button read more , in this case, you can truncate HTML content via JSLink by setting var headlineLimit = 140;
(function () {
var rCtx = {};
rCtx.Templates = {};
rCtx.Templates.Fields = {
'Body': { 'View' : renderHeadline }
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(rCtx);
})();
function renderHeadline(ctx) {
var headlineLimit = 140;
var body = ctx.CurrentItem.Body;
var headline = $(body).text();
if (headline.length > headlineLimit)
{
headline = headline.substring(0,headlineLimit) + ' <b><a href="' + ctx.listUrlDir + '/Post.aspx?ID=' + ctx.CurrentItem.ID + '">More ...</a></b>';
}
return headline;
}
For JSLINK , Check the detail steps at Sharepoint Online - How to show blogs in excerpt format