A solution for many holes to fill at once. This algorithmic approach could be used with any software and could be fully automatized, here I show it for QGIS. See step-by-step screenshots below:
Draw a new polygon covering all holes completelyCreate the layer's bounding box. Let's call this layer
fillBounds.Run
Menu Vector / Geoprocessing Tools / Difference, setfillBoundsasInput layerand the original polygons asOverlay layer. This creates the layerDifference.Run menu
Menu Vector / Geometry Tools / Multipart to singleparts.Delete the parts that fall outside the initial polygon (thouse touching the outer ring of the bounding box). Select them, using
select by expressionwith the following expression, then delete the selected feature:touches ( @geometry, exterior_ring( geometry ( get_feature_by_id ('Bounds',1) ) ) )You're left with the holes only. Run Union to combine them with the initial polygon.
Dissolve the Union layer to merge all features to one polygon.
Screenshot: Screenshots: 1,: original polygons in blue, fill polygon hashedwith holes in red: 
Screenshotblue; Bounding box hached in red; 2/3: after running difference, showingonly the result of step 3, hashed in orange. Theholes and the part outside the holes isinitial polygon remains; the latter can be selected as those features that touch the outer ring of the bounding box (yellowred) and can be deleted. You; 4) after deleting, you remain with the polyons that fillinitial polygon + holes; 5) Running Union, the initial polygon plus the holes are on the same layer; 6) Dissolved layer with the holes filled: 
