To solve the optimization problem described, we first need to translate the natural language description into a symbolic representation. This involves defining variables and formulating the objective function and constraints.

Let's define:
- $x_1$ as the number of bookcases.
- $x_2$ as the number of computer desks.

The profit per bookcase is $500, and the profit per computer desk is $80. Thus, the objective function to maximize profit can be represented as:
\[ 500x_1 + 80x_2 \]

The constraints are as follows:
1. Space constraint: Each bookcase requires 12 sq ft of floor space, and each computer desk requires 5 sq ft. There are 1000 sq ft available.
   - $12x_1 + 5x_2 \leq 1000$
2. Quantity constraint: At least 65% of all furniture must be computer desks.
   - $x_2 \geq 0.65(x_1 + x_2)$
3. Capital constraint: A bookcase ties up $1200 in capital, and a computer desk ties up $200 in capital. The maximum capital tied up at any time is $22000.
   - $1200x_1 + 200x_2 \leq 22000$
4. Non-negativity constraints: The number of bookcases and computer desks cannot be negative.
   - $x_1 \geq 0$, $x_2 \geq 0$

Thus, the symbolic representation of the problem is:
```json
{
    'sym_variables': [('x1', 'number of bookcases'), ('x2', 'number of computer desks')],
    'objective_function': '500*x1 + 80*x2',
    'constraints': [
        '12*x1 + 5*x2 <= 1000',
        'x2 >= 0.65*(x1 + x2)',
        '1200*x1 + 200*x2 <= 22000',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

Now, let's write the Gurobi code in Python to solve this linear programming problem:

```python
from gurobipy import *

# Create a new model
m = Model("Furniture_Optimization")

# Define variables
x1 = m.addVar(name="bookcases", lb=0)
x2 = m.addVar(name="computer_desks", lb=0)

# Set the objective function
m.setObjective(500*x1 + 80*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(12*x1 + 5*x2 <= 1000, name="space_constraint")
m.addConstr(x2 >= 0.65*(x1 + x2), name="quantity_constraint")
m.addConstr(1200*x1 + 200*x2 <= 22000, name="capital_constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of bookcases: {x1.x}")
    print(f"Number of computer desks: {x2.x}")
    print(f"Maximum profit: {m.objVal}")
else:
    print("No optimal solution found.")
```