series_factory.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. # Copyright (c) 2010-2024 openpyxl
  2. from .data_source import NumDataSource, NumRef, AxDataSource
  3. from .reference import Reference
  4. from .series import Series, XYSeries, SeriesLabel, StrRef
  5. from openpyxl.utils import rows_from_range, quote_sheetname
  6. def SeriesFactory(values, xvalues=None, zvalues=None, title=None, title_from_data=False):
  7. """
  8. Convenience Factory for creating chart data series.
  9. """
  10. if not isinstance(values, Reference):
  11. values = Reference(range_string=values)
  12. if title_from_data:
  13. cell = values.pop()
  14. title = u"{0}!{1}".format(values.sheetname, cell)
  15. title = SeriesLabel(strRef=StrRef(title))
  16. elif title is not None:
  17. title = SeriesLabel(v=title)
  18. source = NumDataSource(numRef=NumRef(f=values))
  19. if xvalues is not None:
  20. if not isinstance(xvalues, Reference):
  21. xvalues = Reference(range_string=xvalues)
  22. series = XYSeries()
  23. series.yVal = source
  24. series.xVal = AxDataSource(numRef=NumRef(f=xvalues))
  25. if zvalues is not None:
  26. if not isinstance(zvalues, Reference):
  27. zvalues = Reference(range_string=zvalues)
  28. series.zVal = NumDataSource(NumRef(f=zvalues))
  29. else:
  30. series = Series()
  31. series.val = source
  32. if title is not None:
  33. series.title = title
  34. return series