Add xlsxwriter-based Excel generation scripts with openpyxl implementation
- Created create_excel_xlsxwriter.py and update_excel_xlsxwriter.py - Uses openpyxl exclusively to preserve Excel formatting and formulas - Updated server.js to use new xlsxwriter scripts for form submissions - Maintains all original functionality while ensuring proper Excel file handling 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
110
venv/lib/python3.12/site-packages/xlsxwriter/chart_title.py
Normal file
110
venv/lib/python3.12/site-packages/xlsxwriter/chart_title.py
Normal file
@@ -0,0 +1,110 @@
|
||||
###############################################################################
|
||||
#
|
||||
# ChartTitle - A class for representing Excel chart titles.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause
|
||||
#
|
||||
# Copyright (c) 2013-2025, John McNamara, jmcnamara@cpan.org
|
||||
#
|
||||
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
|
||||
class ChartTitle:
|
||||
"""
|
||||
A class to represent an Excel chart title.
|
||||
|
||||
This class encapsulates all title related properties and methods for the
|
||||
chart title and axis titles.
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""
|
||||
Initialize a ChartTitle instance.
|
||||
"""
|
||||
self.font: Optional[Dict[str, Any]] = None
|
||||
self.name: Optional[str] = None
|
||||
self.formula: Optional[str] = None
|
||||
self.data_id: Optional[int] = None
|
||||
self.layout: Optional[Dict[str, Any]] = None
|
||||
self.overlay: Optional[bool] = None
|
||||
self.hidden: bool = False
|
||||
self.line: Optional[Dict[str, Any]] = None
|
||||
self.fill: Optional[Dict[str, Any]] = None
|
||||
self.pattern: Optional[Dict[str, Any]] = None
|
||||
self.gradient: Optional[Dict[str, Any]] = None
|
||||
|
||||
def has_name(self) -> bool:
|
||||
"""
|
||||
Check if the title has a text name set.
|
||||
|
||||
Returns:
|
||||
True if name has been set.
|
||||
"""
|
||||
return self.name is not None and self.name != ""
|
||||
|
||||
def has_formula(self) -> bool:
|
||||
"""
|
||||
Check if the title has a formula set.
|
||||
|
||||
Returns:
|
||||
True if formula has been set.
|
||||
"""
|
||||
return self.formula is not None
|
||||
|
||||
def has_formatting(self) -> bool:
|
||||
"""
|
||||
Check if the title has any formatting properties set.
|
||||
|
||||
Returns:
|
||||
True if the title has line, fill, pattern, or gradient formatting.
|
||||
"""
|
||||
has_line = self.line is not None and self.line.get("defined", False)
|
||||
has_fill = self.fill is not None and self.fill.get("defined", False)
|
||||
has_pattern = self.pattern
|
||||
has_gradient = self.gradient
|
||||
|
||||
return has_line or has_fill or has_pattern or has_gradient
|
||||
|
||||
def get_formatting(self) -> Dict[str, Any]:
|
||||
"""
|
||||
Get a dictionary containing the formatting properties.
|
||||
|
||||
Returns:
|
||||
A dictionary with line, fill, pattern, and gradient properties.
|
||||
"""
|
||||
return {
|
||||
"line": self.line,
|
||||
"fill": self.fill,
|
||||
"pattern": self.pattern,
|
||||
"gradient": self.gradient,
|
||||
}
|
||||
|
||||
def is_hidden(self) -> bool:
|
||||
"""
|
||||
Check if the title is explicitly hidden.
|
||||
|
||||
Returns:
|
||||
True if title is hidden.
|
||||
"""
|
||||
return self.hidden
|
||||
|
||||
def __repr__(self) -> str:
|
||||
"""
|
||||
Return a string representation of the ChartTitle.
|
||||
"""
|
||||
return (
|
||||
f"ChartTitle(\n"
|
||||
f" name = {self.name!r},\n"
|
||||
f" formula = {self.formula!r},\n"
|
||||
f" hidden = {self.hidden!r},\n"
|
||||
f" font = {self.font!r},\n"
|
||||
f" line = {self.line!r},\n"
|
||||
f" fill = {self.fill!r},\n"
|
||||
f" pattern = {self.pattern!r},\n"
|
||||
f" gradient = {self.gradient!r},\n"
|
||||
f" layout = {self.layout!r},\n"
|
||||
f" overlay = {self.overlay!r},\n"
|
||||
f" has_formatting = {self.has_formatting()!r},\n"
|
||||
f")\n"
|
||||
)
|
||||
Reference in New Issue
Block a user