How to fix Excel and prevent it from converting copy-pasted or imported strings to dates even when cells are formatted as text

Here are three ways that meet the requirements and a 4th way that's more situational. Yes, 2 of them you said not to work by OP. They work for me on Office 365 Pro Plus so they will work for many others, your mileage may vary depending on Excel version:

Method 1 - Copy and Paste

  1. Format the target range as Text
  2. Copy the HTML data
  3. Paste using Match Destination

Method 2 - Get Data From Web

  1. Click "Get Data" on the Data tab of the ribbon
  2. Hover over "From Other Sources" to expand the drop down menu
  3. Select "From Web" and enter the URL/file location
  4. Select the source table from the list on the left side of the query editor
  5. Click "Edit" on the bottom right
  6. Change every column's data type to Text in the "Transform" group of the Home tab on the ribbon
  7. Click "Close & Load", a table will be created in a blank worksheet

Method 3 - VBA

  1. Paste the code from below into a module
  2. Change PathOrURL to your file location or URL
  3. Run the procedure

I wrote this with an assumption that your data source is the first, or maybe only, table in the HTML file. It converts the source table values to strings and writes the string to the worksheet without using copy or paste. Cell formats don't need to change.

Requires MS Internet Controls and MS HTML Object Library references

Option Explicit
Sub GetTextFromHTML()
    Dim PathOrURL as String: PathOrURL = Environ("USERPROFILE") & "\Desktop\a4rZKDWK.html"
    Dim IE As New InternetExplorerMedium
    Dim x As Long, y As Long
    Dim tbl As HTMLTable
    Dim sVals() As String
    IE.Navigate PathOrURL
    Do While IE.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
    Set tbl = IE.Document.getElementsByTagName("table")(0)
    With tbl
    ReDim sVals(1 To .Rows.Length, 1 To .Rows(1).Cells.Length)
        For y = 1 To .Rows.Length
            For x = 1 To .Rows(1).Cells.Length
                    sVals(y, x) = CStr(tbl.Rows(y - 1).Cells(x - 1).innerText)
            Next
        Next
    End With
    IE.Quit
    ActiveSheet.Cells(1, 1).Resize(UBound(sVals), UBound(sVals, 2)).Value = sVals
End Sub

Method 4 - Transitional entry (situational)

  1. Click "File" on the ribbon
  2. Select "Options"
  3. Select "Advanced"
  4. Scroll all the way to the bottom
  5. Check the checkbox for 'transitional entry"
  6. Copy HTML data
  7. Paste in an Excel worksheet

A case can be made for using "transition entry" because it solves the date problem by allowing fractions to be copied and pasted as fractions - HOWEVER - it doesn't satisfy OP's requirements because it also simplifies any reducible fraction; copying 6/9 will will paste 2/3. Irreducible fractions are fine and do not get modified. Improper fractions are also supported.

I suspect Excel is converting the source data from fraction to decimal then back to fractions because simplified fractions are a logical result of a decimal conversion. If you consider starting with 2/4, 3/6, 12/24 they all convert to 0.5 decimal. We lose all information about there uniqueness once they do that. You can differentiate 2/4 from 3/6 but you can't do that with 0.5 and 0.5 Coming from decimal back to fraction, there are literally an infinite number of fractions equal to 0.5 and we could use any of them. We don't know what we started with because everything was lost moving to 0.5, the odds of guessing accurately when you have an infinite number of choices is rather small, so the best result will be fully reduced and simplified, and there's only one of those... 1/2

Sadly the custom format I recommended last week, "#/#", suffers from the exact same problem as "transition entry". It brings all the fractions over but simplifies every reducible fraction pasted.