nebius/SWE-bench-extra huggingface dataset:
Repository: jmcnamara/XlsxWriter

Issue:
Bug: `TypeError` raised when autofitting an empty worksheet
### Current behavior

If you have an empty `Worksheet` and try to autofit, an unexpected `TypeError` is raised.

### Expected behavior

Should not raise an exception if there happens to be nothing to autofit.

### Sample code to reproduce

```python
from xlsxwriter import Workbook

with Workbook('hello.xlsx') as wb:
    ws = wb.add_worksheet()
    ws.autofit()

# TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
```


### Environment

```markdown
- XlsxWriter version: 3.0.8
- Python version: 3.11
```


### Any other information

_No response_

### OpenOffice and LibreOffice users

- [ ] I have tested the output file with Excel.

Comments:

Patch:
diff --git a/xlsxwriter/worksheet.py b/xlsxwriter/worksheet.py
index 7e14ff8b..c935f130 100644
--- a/xlsxwriter/worksheet.py
+++ b/xlsxwriter/worksheet.py
@@ -1835,6 +1835,10 @@ class Worksheet(xmlwriter.XMLwriter):
             warn("Autofit is not supported in constant_memory mode.")
             return
 
+        # No data written to the target sheet; nothing to autofit
+        if self.dim_rowmax is None:
+            return
+
         # Store the max pixel width for each column.
         col_width_max = {}
 


Test patch:
diff --git a/xlsxwriter/test/comparison/test_autofit01.py b/xlsxwriter/test/comparison/test_autofit01.py
index db83a060..855ae889 100644
--- a/xlsxwriter/test/comparison/test_autofit01.py
+++ b/xlsxwriter/test/comparison/test_autofit01.py
@@ -24,9 +24,12 @@ class TestCompareXLSXFiles(ExcelComparisonTest):
         """Test the creation of a simple XlsxWriter file."""
 
         workbook = Workbook(self.got_filename)
-
         worksheet = workbook.add_worksheet()
 
+        # Before writing data, nothing to autofit (should not raise)
+        worksheet.autofit()
+
+        # Write something that can be autofit
         worksheet.write_string(0, 0, "A")
 
         # Check for handling default/None width.