def _write_series(self, subchart): for i, serie in enumerate(self.chart): ser = SubElement(subchart, '{%s}ser' % CHART_NS) SubElement(ser, '{%s}idx' % CHART_NS, {'val':safe_string(i)}) SubElement(ser, '{%s}order' % CHART_NS, {'val':safe_string(i)}) if serie.title: tx = SubElement(ser, '{%s}tx' % CHART_NS) SubElement(tx, '{%s}v' % CHART_NS).text = serie.title if serie.color: sppr = SubElement(ser, '{%s}spPr' % CHART_NS) self._write_series_color(sppr, serie) if serie.error_bar: self._write_error_bar(ser, serie) if serie.labels: self._write_series_labels(ser, serie) if serie.xvalues: self._write_series_xvalues(ser, serie) val = SubElement(ser, self.series_type) self._write_serial(val, serie.reference)
def _write_print_settings(self): settings = SubElement(self.root, '{%s}printSettings' % CHART_NS) SubElement(settings, '{%s}headerFooter' % CHART_NS) margins = dict([(k, safe_string(v)) for (k, v) in iteritems(self.chart.print_margins)]) SubElement(settings, '{%s}pageMargins' % CHART_NS, margins) SubElement(settings, '{%s}pageSetup' % CHART_NS)
def _write_serial(self, node, reference, literal=False): is_ref = hasattr(reference, 'pos1') data_type = reference.data_type number_format = getattr(reference, 'number_format') mapping = {'n':{'ref':'numRef', 'cache':'numCache'}, 's':{'ref':'strRef', 'cache':'strCache'}} if is_ref: ref = SubElement(node, '{%s}%s' %(CHART_NS, mapping[data_type]['ref'])) SubElement(ref, '{%s}f' % CHART_NS).text = str(reference) data = SubElement(ref, '{%s}%s' %(CHART_NS, mapping[data_type]['cache'])) values = reference.values else: data = SubElement(node, '{%s}numLit' % CHART_NS) values = (1,) if data_type == 'n': SubElement(data, '{%s}formatCode' % CHART_NS).text = number_format or 'General' SubElement(data, '{%s}ptCount' % CHART_NS, {'val':str(len(values))}) for j, val in enumerate(values): point = SubElement(data, '{%s}pt' % CHART_NS, {'idx':str(j)}) val = safe_string(val) SubElement(point, '{%s}v' % CHART_NS).text = val
def _write_axis(self, plot_area, axis, label): if self.chart.auto_axis: self.chart.compute_axes() ax = SubElement(plot_area, label) SubElement(ax, '{%s}axId' % CHART_NS, {'val':safe_string(axis.id)}) scaling = SubElement(ax, '{%s}scaling' % CHART_NS) SubElement(scaling, '{%s}orientation' % CHART_NS, {'val':axis.orientation}) if axis.delete_axis: SubElement(scaling, '{%s}' % CHART_NS, {'val':'1'}) if axis.type == "valAx": SubElement(scaling, '{%s}max' % CHART_NS, {'val':str(float(axis.max))}) SubElement(scaling, '{%s}min' % CHART_NS, {'val':str(float(axis.min))}) SubElement(ax, '{%s}axPos' % CHART_NS, {'val':axis.position}) if axis.type == "valAx": SubElement(ax, '{%s}majorGridlines' % CHART_NS) SubElement(ax, '{%s}numFmt' % CHART_NS, {'formatCode':"General", 'sourceLinked':'1'}) self._write_axis_title(axis, ax) SubElement(ax, '{%s}tickLblPos' % CHART_NS, {'val':axis.tick_label_position}) SubElement(ax, '{%s}crossAx' % CHART_NS, {'val':str(axis.cross)}) SubElement(ax, '{%s}crosses' % CHART_NS, {'val':axis.crosses}) if axis.auto: SubElement(ax, '{%s}auto' % CHART_NS, {'val':'1'}) if axis.label_align: SubElement(ax, '{%s}lblAlgn' % CHART_NS, {'val':axis.label_align}) if axis.label_offset: SubElement(ax, '{%s}lblOffset' % CHART_NS, {'val':str(axis.label_offset)}) if axis.type == "valAx": SubElement(ax, '{%s}crossBetween' % CHART_NS, {'val':axis.cross_between}) SubElement(ax, '{%s}majorUnit' % CHART_NS, {'val':str(float(axis.unit))})
def _write_layout(self, element): chart = self.chart plot_area = SubElement(element, '{%s}plotArea' % CHART_NS) layout = SubElement(plot_area, '{%s}layout' % CHART_NS) mlayout = SubElement(layout, '{%s}manualLayout' % CHART_NS) SubElement(mlayout, '{%s}layoutTarget' % CHART_NS, {'val':'inner'}) SubElement(mlayout, '{%s}xMode' % CHART_NS, {'val':'edge'}) SubElement(mlayout, '{%s}yMode' % CHART_NS, {'val':'edge'}) SubElement(mlayout, '{%s}x' % CHART_NS, {'val':safe_string(chart.margin_left)}) SubElement(mlayout, '{%s}y' % CHART_NS, {'val':safe_string(chart.margin_top)}) SubElement(mlayout, '{%s}w' % CHART_NS, {'val':safe_string(chart.width)}) SubElement(mlayout, '{%s}h' % CHART_NS, {'val':safe_string(chart.height)}) chart_type = self.chart.TYPE subchart = SubElement(plot_area, '{%s}%s' % (CHART_NS, chart_type)) self._write_options(subchart) self._write_series(subchart) if isinstance(chart, GraphChart): SubElement(subchart, '{%s}axId' % CHART_NS, {'val':safe_string(chart.x_axis.id)}) SubElement(subchart, '{%s}axId' % CHART_NS, {'val':safe_string(chart.y_axis.id)}) self._write_axis(plot_area, chart.x_axis, '{%s}%s' % (CHART_NS, chart.x_axis.type)) self._write_axis(plot_area, chart.y_axis, '{%s}%s' % (CHART_NS, chart.y_axis.type))