series_factory.py 1.4 KB

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