write_xlsx 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +3 -0
- data/VERSION +1 -1
- data/lib/write_xlsx/chart.rb +421 -604
- data/lib/write_xlsx/chart/area.rb +6 -9
- data/lib/write_xlsx/chart/bar.rb +1 -44
- data/lib/write_xlsx/chart/column.rb +1 -46
- data/lib/write_xlsx/chart/line.rb +6 -9
- data/lib/write_xlsx/chart/pie.rb +42 -63
- data/lib/write_xlsx/chart/scatter.rb +42 -96
- data/lib/write_xlsx/chart/stock.rb +14 -21
- data/lib/write_xlsx/chartsheet.rb +4 -4
- data/lib/write_xlsx/drawing.rb +112 -163
- data/lib/write_xlsx/format.rb +62 -47
- data/lib/write_xlsx/package/app.rb +14 -19
- data/lib/write_xlsx/package/comments.rb +37 -48
- data/lib/write_xlsx/package/core.rb +12 -34
- data/lib/write_xlsx/package/packager.rb +10 -15
- data/lib/write_xlsx/package/relationships.rb +3 -5
- data/lib/write_xlsx/package/shared_strings.rb +7 -9
- data/lib/write_xlsx/package/styles.rb +148 -172
- data/lib/write_xlsx/package/vml.rb +43 -65
- data/lib/write_xlsx/package/xml_writer_simple.rb +7 -3
- data/lib/write_xlsx/workbook.rb +30 -67
- data/lib/write_xlsx/worksheet.rb +189 -239
- data/test/chart/test_write_format_code.rb +2 -1
- data/test/helper.rb +9 -0
- data/test/perl_output/chart_scatter06.xlsx +0 -0
- data/test/test_example_match.rb +37 -0
- data/test/test_xml_writer_simple.rb +9 -8
- data/test/worksheet/test_write_cell.rb +10 -10
- data/write_xlsx.gemspec +3 -2
- metadata +12 -11
data/README.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/lib/write_xlsx/chart.rb
CHANGED
@@ -980,6 +980,23 @@ def set_embedded_config_data
|
|
980
980
|
|
981
981
|
end
|
982
982
|
|
983
|
+
#
|
984
|
+
# Write the <c:barChart> element.
|
985
|
+
#
|
986
|
+
def write_bar_chart # :nodoc:
|
987
|
+
subtype = @subtype
|
988
|
+
subtype = 'percentStacked' if subtype == 'percent_stacked'
|
989
|
+
|
990
|
+
@writer.tag_elements('c:barChart') do
|
991
|
+
# Write the c:barDir element.
|
992
|
+
write_bar_dir
|
993
|
+
# Write the c:grouping element.
|
994
|
+
write_grouping(subtype)
|
995
|
+
# Write the series elements.
|
996
|
+
write_series
|
997
|
+
end
|
998
|
+
end
|
999
|
+
|
983
1000
|
private
|
984
1001
|
|
985
1002
|
#
|
@@ -1436,46 +1453,37 @@ def write_style # :nodoc:
|
|
1436
1453
|
# Write the <c:chart> element.
|
1437
1454
|
#
|
1438
1455
|
def write_chart # :nodoc:
|
1439
|
-
@writer.
|
1456
|
+
@writer.tag_elements('c:chart') do
|
1457
|
+
# Write the chart title elements.
|
1458
|
+
if title = @title_formula
|
1459
|
+
write_title_formula(title, @title_data_id)
|
1460
|
+
elsif title = @title_name
|
1461
|
+
write_title_rich(title)
|
1462
|
+
end
|
1440
1463
|
|
1441
|
-
|
1442
|
-
|
1443
|
-
|
1444
|
-
|
1445
|
-
|
1464
|
+
# Write the c:plotArea element.
|
1465
|
+
write_plot_area
|
1466
|
+
# Write the c:legend element.
|
1467
|
+
write_legend
|
1468
|
+
# Write the c:plotVisOnly element.
|
1469
|
+
write_plot_vis_only
|
1446
1470
|
end
|
1447
|
-
|
1448
|
-
# Write the c:plotArea element.
|
1449
|
-
write_plot_area
|
1450
|
-
|
1451
|
-
# Write the c:legend element.
|
1452
|
-
write_legend
|
1453
|
-
|
1454
|
-
# Write the c:plotVisOnly element.
|
1455
|
-
write_plot_vis_only
|
1456
|
-
|
1457
|
-
@writer.end_tag('c:chart')
|
1458
1471
|
end
|
1459
1472
|
|
1460
1473
|
#
|
1461
1474
|
# Write the <c:plotArea> element.
|
1462
1475
|
#
|
1463
1476
|
def write_plot_area # :nodoc:
|
1464
|
-
@writer.
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
|
1470
|
-
|
1471
|
-
|
1472
|
-
|
1473
|
-
|
1474
|
-
|
1475
|
-
# Write the c:catAx element.
|
1476
|
-
write_val_axis
|
1477
|
-
|
1478
|
-
@writer.end_tag('c:plotArea')
|
1477
|
+
@writer.tag_elements('c:plotArea') do
|
1478
|
+
# Write the c:layout element.
|
1479
|
+
write_layout
|
1480
|
+
# Write the subclass chart type element.
|
1481
|
+
write_chart_type
|
1482
|
+
# Write the c:catAx element.
|
1483
|
+
write_cat_axis
|
1484
|
+
# Write the c:catAx element.
|
1485
|
+
write_val_axis
|
1486
|
+
end
|
1479
1487
|
end
|
1480
1488
|
|
1481
1489
|
#
|
@@ -1504,6 +1512,10 @@ def write_grouping(val) # :nodoc:
|
|
1504
1512
|
# Write the series elements.
|
1505
1513
|
#
|
1506
1514
|
def write_series # :nodoc:
|
1515
|
+
write_series_base { nil }
|
1516
|
+
end
|
1517
|
+
|
1518
|
+
def write_series_base
|
1507
1519
|
# Write each series with subelements.
|
1508
1520
|
index = 0
|
1509
1521
|
@series.each do |series|
|
@@ -1514,6 +1526,10 @@ def write_series # :nodoc:
|
|
1514
1526
|
# Write the c:marker element.
|
1515
1527
|
write_marker_value
|
1516
1528
|
|
1529
|
+
# Write the c:overlap element
|
1530
|
+
# block given by Bar and Column
|
1531
|
+
yield
|
1532
|
+
|
1517
1533
|
# Generate the axis ids.
|
1518
1534
|
add_axis_id
|
1519
1535
|
add_axis_id
|
@@ -1527,39 +1543,28 @@ def write_series # :nodoc:
|
|
1527
1543
|
# Write the <c:ser> element.
|
1528
1544
|
#
|
1529
1545
|
def write_ser(index, series) # :nodoc:
|
1530
|
-
@writer.
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1536
|
-
|
1537
|
-
|
1538
|
-
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
1542
|
-
|
1543
|
-
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1552
|
-
|
1553
|
-
# Write the c:trendline element.
|
1554
|
-
write_trendline(series[:trendline])
|
1555
|
-
|
1556
|
-
# Write the c:cat element.
|
1557
|
-
write_cat(series)
|
1558
|
-
|
1559
|
-
# Write the c:val element.
|
1560
|
-
write_val(series)
|
1561
|
-
|
1562
|
-
@writer.end_tag('c:ser')
|
1546
|
+
@writer.tag_elements('c:ser') do
|
1547
|
+
# Write the c:idx element.
|
1548
|
+
write_idx(index)
|
1549
|
+
# Write the c:order element.
|
1550
|
+
write_order(index)
|
1551
|
+
# Write the series name.
|
1552
|
+
write_series_name(series)
|
1553
|
+
# Write the c:spPr element.
|
1554
|
+
write_sp_pr(series)
|
1555
|
+
# Write the c:marker element.
|
1556
|
+
write_marker(series[:_marker])
|
1557
|
+
# Write the c:invertIfNegative element.
|
1558
|
+
write_c_invert_if_negative(series[:_invert_if_neg])
|
1559
|
+
# Write the c:dLbls element.
|
1560
|
+
write_d_lbls(series[:labels])
|
1561
|
+
# Write the c:trendline element.
|
1562
|
+
write_trendline(series[:trendline])
|
1563
|
+
# Write the c:cat element.
|
1564
|
+
write_cat(series)
|
1565
|
+
# Write the c:val element.
|
1566
|
+
write_val(series)
|
1567
|
+
end
|
1563
1568
|
end
|
1564
1569
|
|
1565
1570
|
#
|
@@ -1606,86 +1611,75 @@ def write_cat(series) # :nodoc:
|
|
1606
1611
|
|
1607
1612
|
@has_category = 1
|
1608
1613
|
|
1609
|
-
@writer.
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
# Write the c:numRef element.
|
1621
|
-
write_num_ref(formula, data, type)
|
1614
|
+
@writer.tag_elements('c:cat') do
|
1615
|
+
# Check the type of cached data.
|
1616
|
+
type = get_data_type(data)
|
1617
|
+
if type == 'str'
|
1618
|
+
@has_category = 0
|
1619
|
+
# Write the c:numRef element.
|
1620
|
+
write_str_ref(formula, data, type)
|
1621
|
+
else
|
1622
|
+
# Write the c:numRef element.
|
1623
|
+
write_num_ref(formula, data, type)
|
1624
|
+
end
|
1622
1625
|
end
|
1623
|
-
|
1624
|
-
@writer.end_tag('c:cat')
|
1625
1626
|
end
|
1626
1627
|
|
1627
1628
|
#
|
1628
1629
|
# Write the <c:val> element.
|
1629
1630
|
#
|
1630
1631
|
def write_val(series) # :nodoc:
|
1631
|
-
|
1632
|
-
|
1633
|
-
data = @formula_data[data_id]
|
1634
|
-
|
1635
|
-
@writer.start_tag('c:val')
|
1632
|
+
write_val_base(series[:_values], series[:_val_data_id], 'c:val')
|
1633
|
+
end
|
1636
1634
|
|
1637
|
-
|
1638
|
-
|
1635
|
+
def write_val_base(formula, data_id, tag) # :nodoc:
|
1636
|
+
data = @formula_data[data_id]
|
1639
1637
|
|
1640
|
-
|
1641
|
-
#
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1638
|
+
@writer.tag_elements(tag) do
|
1639
|
+
# Check the type of cached data.
|
1640
|
+
type = get_data_type(data)
|
1641
|
+
if type == 'str'
|
1642
|
+
# Write the c:numRef element.
|
1643
|
+
write_str_ref(formula, data, type)
|
1644
|
+
else
|
1645
|
+
# Write the c:numRef element.
|
1646
|
+
write_num_ref(formula, data, type)
|
1647
|
+
end
|
1646
1648
|
end
|
1647
|
-
|
1648
|
-
@writer.end_tag('c:val')
|
1649
1649
|
end
|
1650
1650
|
|
1651
1651
|
#
|
1652
1652
|
# Write the <c:numRef> element.
|
1653
1653
|
#
|
1654
1654
|
def write_num_ref(formula, data, type) # :nodoc:
|
1655
|
-
@writer.
|
1656
|
-
|
1657
|
-
|
1658
|
-
|
1659
|
-
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1663
|
-
|
1664
|
-
|
1665
|
-
write_str_cache(data)
|
1655
|
+
@writer.tag_elements('c:numRef') do
|
1656
|
+
# Write the c:f element.
|
1657
|
+
write_series_formula(formula)
|
1658
|
+
if type == 'num'
|
1659
|
+
# Write the c:numCache element.
|
1660
|
+
write_num_cache(data)
|
1661
|
+
elsif type == 'str'
|
1662
|
+
# Write the c:strCache element.
|
1663
|
+
write_str_cache(data)
|
1664
|
+
end
|
1666
1665
|
end
|
1667
|
-
|
1668
|
-
@writer.end_tag('c:numRef')
|
1669
1666
|
end
|
1670
1667
|
|
1671
1668
|
#
|
1672
1669
|
# Write the <c:strRef> element.
|
1673
1670
|
#
|
1674
1671
|
def write_str_ref(formula, data, type) # :nodoc:
|
1675
|
-
@writer.
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1679
|
-
|
1680
|
-
|
1681
|
-
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1685
|
-
write_str_cache(data)
|
1672
|
+
@writer.tag_elements('c:strRef') do
|
1673
|
+
# Write the c:f element.
|
1674
|
+
write_series_formula(formula)
|
1675
|
+
if type == 'num'
|
1676
|
+
# Write the c:numCache element.
|
1677
|
+
write_num_cache(data)
|
1678
|
+
elsif type == 'str'
|
1679
|
+
# Write the c:strCache element.
|
1680
|
+
write_str_cache(data)
|
1681
|
+
end
|
1686
1682
|
end
|
1687
|
-
|
1688
|
-
@writer.end_tag('c:strRef')
|
1689
1683
|
end
|
1690
1684
|
|
1691
1685
|
#
|
@@ -1719,51 +1713,39 @@ def write_cat_axis(position = nil) # :nodoc:
|
|
1719
1713
|
# Overwrite the default axis position with a user supplied value.
|
1720
1714
|
position = x_axis[:_position] || position
|
1721
1715
|
|
1722
|
-
@writer.
|
1723
|
-
|
1724
|
-
|
1725
|
-
|
1726
|
-
|
1727
|
-
|
1728
|
-
|
1729
|
-
|
1730
|
-
|
1731
|
-
|
1732
|
-
|
1733
|
-
|
1734
|
-
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
# Write the c:
|
1751
|
-
|
1752
|
-
|
1753
|
-
|
1754
|
-
write_c_crosses(y_axis[:_crossing])
|
1716
|
+
@writer.tag_elements('c:catAx') do
|
1717
|
+
write_axis_id(@axis_ids[0])
|
1718
|
+
# Write the c:scaling element.
|
1719
|
+
write_scaling(x_axis[:_reverse])
|
1720
|
+
# Write the c:axPos element.
|
1721
|
+
write_axis_pos(position, y_axis[:_reverse])
|
1722
|
+
# Write the axis title elements.
|
1723
|
+
if title = @x_axis[:_formula]
|
1724
|
+
write_title_formula(title, @x_axis[:_data_id], horiz)
|
1725
|
+
elsif title = @x_axis[:_name]
|
1726
|
+
write_title_rich(title, horiz)
|
1727
|
+
end
|
1728
|
+
# Write the c:numFmt element.
|
1729
|
+
write_num_fmt
|
1730
|
+
# Write the c:tickLblPos element.
|
1731
|
+
write_tick_label_pos(x_axis[:_label_position])
|
1732
|
+
# Write the c:crossAx element.
|
1733
|
+
write_cross_axis(@axis_ids[1])
|
1734
|
+
# Note, the category crossing comes from the value axis.
|
1735
|
+
if nil_or_max?(y_axis[:_crossing])
|
1736
|
+
# Write the c:crosses element.
|
1737
|
+
write_crosses(y_axis[:_crossing])
|
1738
|
+
else
|
1739
|
+
# Write the c:crossesAt element.
|
1740
|
+
write_c_crosses(y_axis[:_crossing])
|
1741
|
+
end
|
1742
|
+
# Write the c:auto element.
|
1743
|
+
write_auto(1)
|
1744
|
+
# Write the c:labelAlign element.
|
1745
|
+
write_label_align('ctr')
|
1746
|
+
# Write the c:labelOffset element.
|
1747
|
+
write_label_offset(100)
|
1755
1748
|
end
|
1756
|
-
|
1757
|
-
# Write the c:auto element.
|
1758
|
-
write_auto(1)
|
1759
|
-
|
1760
|
-
# Write the c:labelAlign element.
|
1761
|
-
write_label_align('ctr')
|
1762
|
-
|
1763
|
-
# Write the c:labelOffset element.
|
1764
|
-
write_label_offset(100)
|
1765
|
-
|
1766
|
-
@writer.end_tag('c:catAx')
|
1767
1749
|
end
|
1768
1750
|
|
1769
1751
|
#
|
@@ -1772,62 +1754,19 @@ def write_cat_axis(position = nil) # :nodoc:
|
|
1772
1754
|
# TODO. Maybe should have a _write_cat_val_axis method as well for scatter.
|
1773
1755
|
#
|
1774
1756
|
def write_val_axis(position = nil, hide_major_gridlines = nil) # :nodoc:
|
1775
|
-
|
1776
|
-
|
1777
|
-
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
|
1788
|
-
write_scaling(y_axis[:_reverse], y_axis[:_min], y_axis[:_max], y_axis[:_log_base])
|
1789
|
-
|
1790
|
-
# Write the c:axPos element.
|
1791
|
-
write_axis_pos(position, x_axis[:_reverse])
|
1792
|
-
|
1793
|
-
# Write the c:majorGridlines element.
|
1794
|
-
write_major_gridlines unless hide_major_gridlines
|
1795
|
-
|
1796
|
-
# Write the axis title elements.
|
1797
|
-
if title = @y_axis[:_formula]
|
1798
|
-
write_title_formula(title, @y_axis[:_data_id], horiz)
|
1799
|
-
elsif title = @y_axis[:_name]
|
1800
|
-
write_title_rich(title, horiz)
|
1801
|
-
end
|
1802
|
-
|
1803
|
-
# Write the c:numberFormat element.
|
1804
|
-
write_number_format
|
1805
|
-
|
1806
|
-
# Write the c:tickLblPos element.
|
1807
|
-
write_tick_label_pos(y_axis[:_label_position])
|
1808
|
-
|
1809
|
-
# Write the c:crossAx element.
|
1810
|
-
write_cross_axis(@axis_ids[0])
|
1811
|
-
|
1812
|
-
# Note, the category crossing comes from the value axis.
|
1813
|
-
if x_axis[:crossing].nil? || x_axis[:_crossing] == 'max'
|
1814
|
-
# Write the c:crosses element.
|
1815
|
-
write_crosses(x_axis[:_crossing])
|
1816
|
-
else
|
1817
|
-
# Write the c:crossesAt element.
|
1818
|
-
write_c_crosses_at(x_axis[:_crossing])
|
1819
|
-
end
|
1820
|
-
|
1821
|
-
# Write the c:crossBetween element.
|
1822
|
-
write_cross_between
|
1823
|
-
|
1824
|
-
# Write the c:majorUnit element.
|
1825
|
-
write_c_major_unit(y_axis[:_major_unit])
|
1826
|
-
|
1827
|
-
# Write the c:minorUnit element.
|
1828
|
-
write_c_minor_unit(y_axis[:_minor_unit])
|
1829
|
-
|
1830
|
-
@writer.end_tag('c:valAx')
|
1757
|
+
params = {
|
1758
|
+
:axis_position => @y_axis[:_position],
|
1759
|
+
:axis_id => @axis_ids[1],
|
1760
|
+
:scaling_axis => @y_axis,
|
1761
|
+
:axis_position_element => @x_axis[:_reverse],
|
1762
|
+
:title_axis => @y_axis,
|
1763
|
+
:tick_label_pos => @y_axis[:_label_position],
|
1764
|
+
:cross_axis => @axis_ids[0],
|
1765
|
+
:category_crossing => @x_axis[:_crossing],
|
1766
|
+
:major_unit => @y_axis[:_major_unit],
|
1767
|
+
:minor_unit => @y_axis[:_minor_unit]
|
1768
|
+
}
|
1769
|
+
write_val_axis_common(position, hide_major_gridlines, params)
|
1831
1770
|
end
|
1832
1771
|
|
1833
1772
|
#
|
@@ -1836,62 +1775,65 @@ def write_val_axis(position = nil, hide_major_gridlines = nil) # :nodoc:
|
|
1836
1775
|
# Usually the X axis.
|
1837
1776
|
#
|
1838
1777
|
def write_cat_val_axis(position, hide_major_gridlines) # :nodoc:
|
1778
|
+
params = {
|
1779
|
+
:axis_position => @x_axis[:_position],
|
1780
|
+
:axis_id => @axis_ids[0],
|
1781
|
+
:scaling_axis => @x_axis,
|
1782
|
+
:axis_position_element => @y_axis[:_reverse],
|
1783
|
+
:title_axis => @x_axis,
|
1784
|
+
:tick_label_pos => @x_axis[:_label_position],
|
1785
|
+
:cross_axis => @axis_ids[1],
|
1786
|
+
:category_crossing => @y_axis[:_crossing],
|
1787
|
+
:major_unit => @x_axis[:_major_unit],
|
1788
|
+
:minor_unit => @x_axis[:_minor_unit]
|
1789
|
+
}
|
1790
|
+
write_val_axis_common(position, hide_major_gridlines, params)
|
1791
|
+
end
|
1792
|
+
|
1793
|
+
def write_val_axis_common(position, hide_major_gridlines, params) # :nodoc:
|
1839
1794
|
position ||= @val_axis_position
|
1840
|
-
horiz
|
1841
|
-
x_axis = @x_axis
|
1842
|
-
y_axis = @y_axis
|
1795
|
+
horiz = @horiz_val_axis
|
1843
1796
|
|
1844
1797
|
# Overwrite the default axis position with a user supplied value.
|
1845
|
-
position =
|
1846
|
-
|
1847
|
-
@writer.
|
1848
|
-
|
1849
|
-
|
1850
|
-
|
1851
|
-
|
1852
|
-
|
1853
|
-
|
1854
|
-
|
1855
|
-
|
1856
|
-
|
1857
|
-
|
1858
|
-
|
1859
|
-
|
1860
|
-
|
1861
|
-
|
1862
|
-
|
1863
|
-
|
1864
|
-
|
1865
|
-
|
1866
|
-
|
1867
|
-
|
1868
|
-
|
1869
|
-
|
1870
|
-
|
1871
|
-
|
1872
|
-
|
1873
|
-
|
1874
|
-
|
1875
|
-
|
1876
|
-
|
1877
|
-
|
1878
|
-
|
1879
|
-
|
1880
|
-
|
1881
|
-
# Write the c:
|
1882
|
-
|
1798
|
+
position = params[:axis_position] || position
|
1799
|
+
|
1800
|
+
@writer.tag_elements('c:valAx') do
|
1801
|
+
write_axis_id(params[:axis_id])
|
1802
|
+
# Write the c:scaling element.
|
1803
|
+
write_scaling(
|
1804
|
+
params[:scaling_axis][:_reverse], params[:scaling_axis][:_min],
|
1805
|
+
params[:scaling_axis][:_max], params[:scaling_axis][:_log_base])
|
1806
|
+
# Write the c:axPos element.
|
1807
|
+
write_axis_pos(position, params[:axis_position_element])
|
1808
|
+
# Write the c:majorGridlines element.
|
1809
|
+
write_major_gridlines unless hide_major_gridlines
|
1810
|
+
# Write the axis title elements.
|
1811
|
+
if title = params[:title_axis][:_formula]
|
1812
|
+
write_title_formula(title, @y_axis[:_data_id], horiz)
|
1813
|
+
elsif title = params[:title_axis][:_name]
|
1814
|
+
write_title_rich(title, horiz)
|
1815
|
+
end
|
1816
|
+
# Write the c:numberFormat element.
|
1817
|
+
write_number_format
|
1818
|
+
# Write the c:tickLblPos element.
|
1819
|
+
write_tick_label_pos(params[:tick_label_pos])
|
1820
|
+
# Write the c:crossAx element.
|
1821
|
+
write_cross_axis(params[:cross_axis])
|
1822
|
+
# Note, the category crossing comes from the value axis.
|
1823
|
+
if nil_or_max?(params[:category_crossing])
|
1824
|
+
# Write the c:crosses element.
|
1825
|
+
write_crosses(params[:category_crossing])
|
1826
|
+
else
|
1827
|
+
# Write the c:crossesAt element.
|
1828
|
+
write_c_crosses_at(params[:category_crossing])
|
1829
|
+
end
|
1830
|
+
# Write the c:crossBetween element.
|
1831
|
+
write_cross_between
|
1832
|
+
# Write the c:majorUnit element.
|
1833
|
+
write_c_major_unit(params[:major_unit])
|
1834
|
+
# Write the c:minorUnit element.
|
1835
|
+
write_c_minor_unit(params[:minor_unit])
|
1883
1836
|
end
|
1884
|
-
|
1885
|
-
# Write the c:crossBetween element.
|
1886
|
-
write_cross_between
|
1887
|
-
|
1888
|
-
# Write the c:majorunit element.
|
1889
|
-
write_c_major_unit(y_axis[:_major_unit])
|
1890
|
-
|
1891
|
-
# Write the c:minorUnit element.
|
1892
|
-
write_c_minor_unit(y_axis[:_minor_unit])
|
1893
|
-
|
1894
|
-
@writer.end_tag('c:valAx')
|
1895
1837
|
end
|
1896
1838
|
|
1897
1839
|
#
|
@@ -1902,85 +1844,65 @@ def write_date_axis(position = nil) # :nodoc:
|
|
1902
1844
|
x_axis = @x_axis
|
1903
1845
|
y_axis = @y_axis
|
1904
1846
|
|
1905
|
-
@writer.
|
1906
|
-
|
1907
|
-
|
1908
|
-
|
1909
|
-
|
1910
|
-
|
1911
|
-
|
1912
|
-
|
1913
|
-
|
1914
|
-
|
1915
|
-
|
1916
|
-
|
1917
|
-
|
1918
|
-
|
1919
|
-
|
1920
|
-
|
1921
|
-
|
1922
|
-
|
1923
|
-
|
1924
|
-
|
1925
|
-
|
1926
|
-
|
1927
|
-
|
1928
|
-
|
1929
|
-
|
1930
|
-
|
1931
|
-
|
1932
|
-
|
1933
|
-
# Write the c:
|
1934
|
-
|
1935
|
-
|
1936
|
-
|
1937
|
-
|
1938
|
-
|
1939
|
-
|
1940
|
-
|
1941
|
-
|
1942
|
-
|
1943
|
-
|
1944
|
-
|
1945
|
-
|
1946
|
-
|
1947
|
-
write_c_major_unit(x_axis[:_major_unit])
|
1948
|
-
|
1949
|
-
# Write the c:majorTimeUnit element.
|
1950
|
-
if !x_axis[:_major_unit].nil?
|
1951
|
-
write_c_major_time_unit(x_axis[:_major_unit_type])
|
1952
|
-
end
|
1953
|
-
|
1954
|
-
# Write the c:minorUnit element.
|
1955
|
-
write_c_minor_unit(x_axis[:_minor_unit])
|
1956
|
-
|
1957
|
-
# Write the c:minorTimeUnit element.
|
1958
|
-
if !x_axis[:_minor_unit].nil?
|
1959
|
-
write_c_minor_time_unit(x_axis[:_minor_unit_type])
|
1847
|
+
@writer.tag_elements('c:dateAx') do
|
1848
|
+
write_axis_id(@axis_ids[0])
|
1849
|
+
# Write the c:scaling element.
|
1850
|
+
write_scaling(x_axis[:reverse], x_axis[:_min], x_axis[:_max], x_axis[:_log_base])
|
1851
|
+
# Write the c:axPos element.
|
1852
|
+
write_axis_pos(position, y_axis[:reverse])
|
1853
|
+
# Write the axis title elements.
|
1854
|
+
if title = x_axis[:_formula]
|
1855
|
+
write_title_formula(title, x_axis[:_data_id])
|
1856
|
+
elsif title = x_axis[:_name]
|
1857
|
+
write_title_rich(title)
|
1858
|
+
end
|
1859
|
+
# Write the c:numFmt element.
|
1860
|
+
write_num_fmt('dd/mm/yyyy')
|
1861
|
+
# Write the c:tickLblPos element.
|
1862
|
+
write_tick_label_pos(x_axis[:_label_position])
|
1863
|
+
# Write the c:crossAx element.
|
1864
|
+
write_cross_axis(@axis_ids[1])
|
1865
|
+
# Note, the category crossing comes from the value axis.
|
1866
|
+
if nil_or_max?(y_axis[:_crossing])
|
1867
|
+
# Write the c:crossing element.
|
1868
|
+
write_crosses(y_axis[:_crossing])
|
1869
|
+
else
|
1870
|
+
# Write the c:crossesAt element.
|
1871
|
+
write_c_crosses_at(y_axis[:_crossing])
|
1872
|
+
end
|
1873
|
+
# Write the c:auto element.
|
1874
|
+
write_auto(1)
|
1875
|
+
# Write the c:labelOffset element.
|
1876
|
+
write_label_offset(100)
|
1877
|
+
# Write the c:majorUnit element.
|
1878
|
+
write_c_major_unit(x_axis[:_major_unit])
|
1879
|
+
# Write the c:majorTimeUnit element.
|
1880
|
+
if !x_axis[:_major_unit].nil?
|
1881
|
+
write_c_major_time_unit(x_axis[:_major_unit_type])
|
1882
|
+
end
|
1883
|
+
# Write the c:minorUnit element.
|
1884
|
+
write_c_minor_unit(x_axis[:_minor_unit])
|
1885
|
+
# Write the c:minorTimeUnit element.
|
1886
|
+
if !x_axis[:_minor_unit].nil?
|
1887
|
+
write_c_minor_time_unit(x_axis[:_minor_unit_type])
|
1888
|
+
end
|
1960
1889
|
end
|
1961
|
-
|
1962
|
-
@writer.end_tag('c:dateAx')
|
1963
1890
|
end
|
1964
1891
|
|
1965
1892
|
#
|
1966
1893
|
# Write the <c:scaling> element.
|
1967
1894
|
#
|
1968
1895
|
def write_scaling(reverse, min = nil, max = nil, log_base = nil) # :nodoc:
|
1969
|
-
@writer.
|
1970
|
-
|
1971
|
-
|
1972
|
-
|
1973
|
-
|
1974
|
-
|
1975
|
-
|
1976
|
-
|
1977
|
-
|
1978
|
-
|
1979
|
-
|
1980
|
-
# Write the c:min element.
|
1981
|
-
write_c_min(min)
|
1982
|
-
|
1983
|
-
@writer.end_tag('c:scaling')
|
1896
|
+
@writer.tag_elements('c:scaling') do
|
1897
|
+
# Write the c:logBase element.
|
1898
|
+
write_c_log_base(log_base)
|
1899
|
+
# Write the c:orientation element.
|
1900
|
+
write_orientation(reverse)
|
1901
|
+
# Write the c:max element.
|
1902
|
+
write_c_max(max)
|
1903
|
+
# Write the c:min element.
|
1904
|
+
write_c_min(min)
|
1905
|
+
end
|
1984
1906
|
end
|
1985
1907
|
|
1986
1908
|
#
|
@@ -2241,24 +2163,19 @@ def write_legend # :nodoc:
|
|
2241
2163
|
|
2242
2164
|
position = allowed[position]
|
2243
2165
|
|
2244
|
-
@writer.
|
2245
|
-
|
2246
|
-
|
2247
|
-
|
2248
|
-
|
2249
|
-
|
2250
|
-
|
2251
|
-
|
2252
|
-
|
2253
|
-
|
2254
|
-
|
2255
|
-
|
2256
|
-
|
2257
|
-
|
2258
|
-
# Write the c:overlay element.
|
2259
|
-
write_overlay if overlay
|
2260
|
-
|
2261
|
-
@writer.end_tag('c:legend')
|
2166
|
+
@writer.tag_elements('c:legend') do
|
2167
|
+
# Write the c:legendPos element.
|
2168
|
+
write_legend_pos(position)
|
2169
|
+
# Remove series labels from the legend.
|
2170
|
+
@delete_series.each do |index|
|
2171
|
+
# Write the c:legendEntry element.
|
2172
|
+
write_legend_entry(index)
|
2173
|
+
end if @delete_series
|
2174
|
+
# Write the c:layout element.
|
2175
|
+
write_layout
|
2176
|
+
# Write the c:overlay element.
|
2177
|
+
write_overlay if overlay
|
2178
|
+
end
|
2262
2179
|
end
|
2263
2180
|
|
2264
2181
|
#
|
@@ -2274,15 +2191,12 @@ def write_legend_pos(val) # :nodoc:
|
|
2274
2191
|
# Write the <c:legendEntry> element.
|
2275
2192
|
#
|
2276
2193
|
def write_legend_entry(index) # :nodoc:
|
2277
|
-
@writer.
|
2278
|
-
|
2279
|
-
|
2280
|
-
|
2281
|
-
|
2282
|
-
|
2283
|
-
write_delete(1)
|
2284
|
-
|
2285
|
-
@writer.end_tag('c:legendEntry')
|
2194
|
+
@writer.tag_elements('c:legendEntry') do
|
2195
|
+
# Write the c:idx element.
|
2196
|
+
write_idx(index)
|
2197
|
+
# Write the c:delete element.
|
2198
|
+
write_delete(1)
|
2199
|
+
end
|
2286
2200
|
end
|
2287
2201
|
|
2288
2202
|
#
|
@@ -2311,18 +2225,14 @@ def write_plot_vis_only # :nodoc:
|
|
2311
2225
|
# Write the <c:printSettings> element.
|
2312
2226
|
#
|
2313
2227
|
def write_print_settings # :nodoc:
|
2314
|
-
@writer.
|
2315
|
-
|
2316
|
-
|
2317
|
-
|
2318
|
-
|
2319
|
-
|
2320
|
-
|
2321
|
-
|
2322
|
-
# Write the c:pageSetup element.
|
2323
|
-
write_page_setup
|
2324
|
-
|
2325
|
-
@writer.end_tag('c:printSettings')
|
2228
|
+
@writer.tag_elements('c:printSettings') do
|
2229
|
+
# Write the c:headerFooter element.
|
2230
|
+
write_header_footer
|
2231
|
+
# Write the c:pageMargins element.
|
2232
|
+
write_page_margins
|
2233
|
+
# Write the c:pageSetup element.
|
2234
|
+
write_page_setup
|
2235
|
+
end
|
2326
2236
|
end
|
2327
2237
|
|
2328
2238
|
#
|
@@ -2366,57 +2276,40 @@ def write_page_setup # :nodoc:
|
|
2366
2276
|
# Write the <c:title> element for a rich string.
|
2367
2277
|
#
|
2368
2278
|
def write_title_rich(title, horiz = nil) # :nodoc:
|
2369
|
-
@writer.
|
2370
|
-
|
2371
|
-
|
2372
|
-
|
2373
|
-
|
2374
|
-
|
2375
|
-
write_layout
|
2376
|
-
|
2377
|
-
@writer.end_tag('c:title')
|
2279
|
+
@writer.tag_elements('c:title') do
|
2280
|
+
# Write the c:tx element.
|
2281
|
+
write_tx_rich(title, horiz)
|
2282
|
+
# Write the c:layout element.
|
2283
|
+
write_layout
|
2284
|
+
end
|
2378
2285
|
end
|
2379
2286
|
|
2380
2287
|
#
|
2381
2288
|
# Write the <c:title> element for a rich string.
|
2382
2289
|
#
|
2383
2290
|
def write_title_formula(title, data_id, horiz) # :nodoc:
|
2384
|
-
@writer.
|
2385
|
-
|
2386
|
-
|
2387
|
-
|
2388
|
-
|
2389
|
-
|
2390
|
-
|
2391
|
-
|
2392
|
-
# Write the c:txPr element.
|
2393
|
-
write_tx_pr(horiz)
|
2394
|
-
|
2395
|
-
@writer.end_tag('c:title')
|
2291
|
+
@writer.tag_elements('c:title') do
|
2292
|
+
# Write the c:tx element.
|
2293
|
+
write_tx_formula(title, data_id)
|
2294
|
+
# Write the c:layout element.
|
2295
|
+
write_layout
|
2296
|
+
# Write the c:txPr element.
|
2297
|
+
write_tx_pr(horiz)
|
2298
|
+
end
|
2396
2299
|
end
|
2397
2300
|
|
2398
2301
|
#
|
2399
2302
|
# Write the <c:tx> element.
|
2400
2303
|
#
|
2401
2304
|
def write_tx_rich(title, horiz) # :nodoc:
|
2402
|
-
@writer.
|
2403
|
-
|
2404
|
-
# Write the c:rich element.
|
2405
|
-
write_rich(title, horiz)
|
2406
|
-
|
2407
|
-
@writer.end_tag('c:tx')
|
2305
|
+
@writer.tag_elements('c:tx') { write_rich(title, horiz) }
|
2408
2306
|
end
|
2409
2307
|
|
2410
2308
|
#
|
2411
2309
|
# Write the <c:tx> element with a simple value such as for series names.
|
2412
2310
|
#
|
2413
2311
|
def write_tx_value(title) # :nodoc:
|
2414
|
-
@writer.
|
2415
|
-
|
2416
|
-
# Write the c:v element.
|
2417
|
-
write_v(title)
|
2418
|
-
|
2419
|
-
@writer.end_tag('c:tx')
|
2312
|
+
@writer.tag_elements('c:tx') { write_v(title) }
|
2420
2313
|
end
|
2421
2314
|
|
2422
2315
|
#
|
@@ -2425,30 +2318,21 @@ def write_tx_value(title) # :nodoc:
|
|
2425
2318
|
def write_tx_formula(title, data_id) # :nodoc:
|
2426
2319
|
data = @formula_data[data_id] if data_id
|
2427
2320
|
|
2428
|
-
@writer.
|
2429
|
-
|
2430
|
-
# Write the c:strRef element.
|
2431
|
-
write_str_ref(title, data, 'str')
|
2432
|
-
|
2433
|
-
@writer.end_tag('c:tx')
|
2321
|
+
@writer.tag_elements('c:tx') { write_str_ref(title, data, 'str') }
|
2434
2322
|
end
|
2435
2323
|
|
2436
2324
|
#
|
2437
2325
|
# Write the <c:rich> element.
|
2438
2326
|
#
|
2439
2327
|
def write_rich(title, horiz) # :nodoc:
|
2440
|
-
@writer.
|
2441
|
-
|
2442
|
-
|
2443
|
-
|
2444
|
-
|
2445
|
-
|
2446
|
-
|
2447
|
-
|
2448
|
-
# Write the a:p element.
|
2449
|
-
write_a_p_rich(title)
|
2450
|
-
|
2451
|
-
@writer.end_tag('c:rich')
|
2328
|
+
@writer.tag_elements('c:rich') do
|
2329
|
+
# Write the a:bodyPr element.
|
2330
|
+
write_a_body_pr(horiz)
|
2331
|
+
# Write the a:lstStyle element.
|
2332
|
+
write_a_lst_style
|
2333
|
+
# Write the a:p element.
|
2334
|
+
write_a_p_rich(title)
|
2335
|
+
end
|
2452
2336
|
end
|
2453
2337
|
|
2454
2338
|
#
|
@@ -2479,54 +2363,38 @@ def write_a_lst_style # :nodoc:
|
|
2479
2363
|
# Write the <a:p> element for rich string titles.
|
2480
2364
|
#
|
2481
2365
|
def write_a_p_rich(title) # :nodoc:
|
2482
|
-
@writer.
|
2483
|
-
|
2484
|
-
|
2485
|
-
|
2486
|
-
|
2487
|
-
|
2488
|
-
write_a_r(title)
|
2489
|
-
|
2490
|
-
@writer.end_tag('a:p')
|
2366
|
+
@writer.tag_elements('a:p') do
|
2367
|
+
# Write the a:pPr element.
|
2368
|
+
write_a_p_pr_rich
|
2369
|
+
# Write the a:r element.
|
2370
|
+
write_a_r(title)
|
2371
|
+
end
|
2491
2372
|
end
|
2492
2373
|
|
2493
2374
|
#
|
2494
2375
|
# Write the <a:p> element for formula titles.
|
2495
2376
|
#
|
2496
2377
|
def write_a_p_formula(title) # :nodoc:
|
2497
|
-
@writer.
|
2498
|
-
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2502
|
-
|
2503
|
-
write_a_end_para_rpr
|
2504
|
-
|
2505
|
-
@writer.end_tag('a:p')
|
2378
|
+
@writer.tag_elements('a:p') do
|
2379
|
+
# Write the a:pPr element.
|
2380
|
+
write_a_p_pr_formula
|
2381
|
+
# Write the a:endParaRPr element.
|
2382
|
+
write_a_end_para_rpr
|
2383
|
+
end
|
2506
2384
|
end
|
2507
2385
|
|
2508
2386
|
#
|
2509
2387
|
# Write the <a:pPr> element for rich string titles.
|
2510
2388
|
#
|
2511
2389
|
def write_a_p_pr_rich # :nodoc:
|
2512
|
-
@writer.
|
2513
|
-
|
2514
|
-
# Write the a:defRPr element.
|
2515
|
-
write_a_def_rpr
|
2516
|
-
|
2517
|
-
@writer.end_tag('a:pPr')
|
2390
|
+
@writer.tag_elements('a:pPr') { write_a_def_rpr }
|
2518
2391
|
end
|
2519
2392
|
|
2520
2393
|
#
|
2521
2394
|
# Write the <a:pPr> element for formula titles.
|
2522
2395
|
#
|
2523
2396
|
def write_a_p_pr_formula # :nodoc:
|
2524
|
-
@writer.
|
2525
|
-
|
2526
|
-
# Write the a:defRPr element.
|
2527
|
-
write_a_def_rpr
|
2528
|
-
|
2529
|
-
@writer.end_tag('a:pPr')
|
2397
|
+
@writer.tag_elements('a:pPr') { write_a_def_rpr }
|
2530
2398
|
end
|
2531
2399
|
|
2532
2400
|
#
|
@@ -2551,15 +2419,12 @@ def write_a_end_para_rpr # :nodoc:
|
|
2551
2419
|
# Write the <a:r> element.
|
2552
2420
|
#
|
2553
2421
|
def write_a_r(title) # :nodoc:
|
2554
|
-
@writer.
|
2555
|
-
|
2556
|
-
|
2557
|
-
|
2558
|
-
|
2559
|
-
|
2560
|
-
write_a_t(title)
|
2561
|
-
|
2562
|
-
@writer.end_tag('a:r')
|
2422
|
+
@writer.tag_elements('a:r') do
|
2423
|
+
# Write the a:rPr element.
|
2424
|
+
write_a_r_pr
|
2425
|
+
# Write the a:t element.
|
2426
|
+
write_a_t(title)
|
2427
|
+
end
|
2563
2428
|
end
|
2564
2429
|
|
2565
2430
|
#
|
@@ -2584,18 +2449,14 @@ def write_a_t(title) # :nodoc:
|
|
2584
2449
|
# Write the <c:txPr> element.
|
2585
2450
|
#
|
2586
2451
|
def write_tx_pr(horiz) # :nodoc:
|
2587
|
-
@writer.
|
2588
|
-
|
2589
|
-
|
2590
|
-
|
2591
|
-
|
2592
|
-
|
2593
|
-
|
2594
|
-
|
2595
|
-
# Write the a:p element.
|
2596
|
-
write_a_p_formula
|
2597
|
-
|
2598
|
-
@writer.end_tag('c:txPr')
|
2452
|
+
@writer.tag_elements('c:txPr') do
|
2453
|
+
# Write the a:bodyPr element.
|
2454
|
+
write_a_body_pr(horiz)
|
2455
|
+
# Write the a:lstStyle element.
|
2456
|
+
write_a_lst_style
|
2457
|
+
# Write the a:p element.
|
2458
|
+
write_a_p_formula
|
2459
|
+
end
|
2599
2460
|
end
|
2600
2461
|
|
2601
2462
|
#
|
@@ -2607,19 +2468,15 @@ def write_marker(marker = nil) # :nodoc:
|
|
2607
2468
|
return if marker.nil? || marker == 0
|
2608
2469
|
return if marker[:automatic] && marker[:automatic] != 0
|
2609
2470
|
|
2610
|
-
@writer.
|
2611
|
-
|
2612
|
-
|
2613
|
-
|
2614
|
-
|
2615
|
-
|
2616
|
-
|
2617
|
-
|
2618
|
-
|
2619
|
-
# Write the c:spPr element.
|
2620
|
-
write_sp_pr(marker)
|
2621
|
-
|
2622
|
-
@writer.end_tag('c:marker')
|
2471
|
+
@writer.tag_elements('c:marker') do
|
2472
|
+
# Write the c:symbol element.
|
2473
|
+
write_symbol(marker[:type])
|
2474
|
+
# Write the c:size element.
|
2475
|
+
size = marker[:size]
|
2476
|
+
write_marker_size(size) if !size.nil? && size != 0
|
2477
|
+
# Write the c:spPr element.
|
2478
|
+
write_sp_pr(marker)
|
2479
|
+
end
|
2623
2480
|
end
|
2624
2481
|
|
2625
2482
|
#
|
@@ -2660,15 +2517,12 @@ def write_sp_pr(series) # :nodoc:
|
|
2660
2517
|
return if (!series.has_key?(:_line) || series[:_line][:_defined].nil? || series[:_line][:_defined]== 0) &&
|
2661
2518
|
(!series.has_key?(:_fill) || series[:_fill][:_defined].nil? || series[:_fill][:_defined]== 0)
|
2662
2519
|
|
2663
|
-
@writer.
|
2664
|
-
|
2665
|
-
|
2666
|
-
|
2667
|
-
|
2668
|
-
|
2669
|
-
write_a_ln(series[:_line]) if series[:_line] && series[:_line][:_defined]
|
2670
|
-
|
2671
|
-
@writer.end_tag('c:spPr')
|
2520
|
+
@writer.tag_elements('c:spPr') do
|
2521
|
+
# Write the a:solidFill element for solid charts such as pie and bar.
|
2522
|
+
write_a_solid_fill(series[:_fill]) if series[:_fill] && series[:_fill][:_defined] != 0
|
2523
|
+
# Write the a:ln element.
|
2524
|
+
write_a_ln(series[:_line]) if series[:_line] && series[:_line][:_defined]
|
2525
|
+
end
|
2672
2526
|
end
|
2673
2527
|
|
2674
2528
|
#
|
@@ -2688,24 +2542,21 @@ def write_a_ln(line) # :nodoc:
|
|
2688
2542
|
attributes = ['w', width]
|
2689
2543
|
end
|
2690
2544
|
|
2691
|
-
@writer.
|
2692
|
-
|
2693
|
-
|
2694
|
-
|
2695
|
-
|
2696
|
-
|
2697
|
-
|
2698
|
-
|
2699
|
-
|
2700
|
-
|
2701
|
-
|
2702
|
-
|
2703
|
-
|
2704
|
-
|
2705
|
-
write_a_prst_dash(type)
|
2545
|
+
@writer.tag_elements('a:ln', attributes) do
|
2546
|
+
# Write the line fill.
|
2547
|
+
if !line[:none].nil? && line[:none] != 0
|
2548
|
+
# Write the a:noFill element.
|
2549
|
+
write_a_no_fill
|
2550
|
+
else
|
2551
|
+
# Write the a:solidFill element.
|
2552
|
+
write_a_solid_fill(line)
|
2553
|
+
end
|
2554
|
+
# Write the line/dash type.
|
2555
|
+
if type = line[:dash_type]
|
2556
|
+
# Write the a:prstDash element.
|
2557
|
+
write_a_prst_dash(type)
|
2558
|
+
end
|
2706
2559
|
end
|
2707
|
-
|
2708
|
-
@writer.end_tag('a:ln')
|
2709
2560
|
end
|
2710
2561
|
|
2711
2562
|
#
|
@@ -2719,16 +2570,14 @@ def write_a_no_fill # :nodoc:
|
|
2719
2570
|
# Write the <a:solidFill> element.
|
2720
2571
|
#
|
2721
2572
|
def write_a_solid_fill(line) # :nodoc:
|
2722
|
-
@writer.
|
2723
|
-
|
2724
|
-
|
2725
|
-
color = get_color(line[:color])
|
2573
|
+
@writer.tag_elements('a:solidFill') do
|
2574
|
+
if line[:color]
|
2575
|
+
color = get_color(line[:color])
|
2726
2576
|
|
2727
|
-
|
2728
|
-
|
2577
|
+
# Write the a:srgbClr element.
|
2578
|
+
write_a_srgb_clr(color)
|
2579
|
+
end
|
2729
2580
|
end
|
2730
|
-
|
2731
|
-
@writer.end_tag('a:solidFill')
|
2732
2581
|
end
|
2733
2582
|
|
2734
2583
|
#
|
@@ -2755,31 +2604,22 @@ def write_a_prst_dash(val) # :nodoc:
|
|
2755
2604
|
def write_trendline(trendline) # :nodoc:
|
2756
2605
|
return unless trendline
|
2757
2606
|
|
2758
|
-
@writer.
|
2759
|
-
|
2760
|
-
|
2761
|
-
|
2762
|
-
|
2763
|
-
|
2764
|
-
|
2765
|
-
|
2766
|
-
|
2767
|
-
|
2768
|
-
|
2769
|
-
|
2770
|
-
|
2771
|
-
|
2772
|
-
|
2773
|
-
|
2774
|
-
|
2775
|
-
|
2776
|
-
# Write the c:forward element.
|
2777
|
-
write_forward(trendline[forward])
|
2778
|
-
|
2779
|
-
# Write the c:backward element.
|
2780
|
-
write_backward(trendline[backward])
|
2781
|
-
|
2782
|
-
@writer.end_tag('c:trendline')
|
2607
|
+
@writer.tag_elements('c:trendline') do
|
2608
|
+
# Write the c:name element.
|
2609
|
+
write_name(trendline[name])
|
2610
|
+
# Write the c:spPr element.
|
2611
|
+
write_sp_pr(trendline)
|
2612
|
+
# Write the c:trendlineType element.
|
2613
|
+
write_trendline_type(trendline[type])
|
2614
|
+
# Write the c:order element for polynomial trendlines.
|
2615
|
+
write_trendline_order(trendline[order]) if trendline[type] == 'poly'
|
2616
|
+
# Write the c:period element for moving average trendlines.
|
2617
|
+
write_period(trendline[period]) if trendline[type] == 'movingAvg'
|
2618
|
+
# Write the c:forward element.
|
2619
|
+
write_forward(trendline[forward])
|
2620
|
+
# Write the c:backward element.
|
2621
|
+
write_backward(trendline[backward])
|
2622
|
+
end
|
2783
2623
|
end
|
2784
2624
|
|
2785
2625
|
#
|
@@ -2862,43 +2702,25 @@ def write_overlap # :nodoc:
|
|
2862
2702
|
# Write the <c:numCache> element.
|
2863
2703
|
#
|
2864
2704
|
def write_num_cache(data) # :nodoc:
|
2865
|
-
|
2866
|
-
|
2867
|
-
|
2868
|
-
|
2869
|
-
# Write the c:formatCode element.
|
2870
|
-
write_format_code('General')
|
2871
|
-
|
2872
|
-
# Write the c:ptCount element.
|
2873
|
-
write_pt_count(count)
|
2874
|
-
|
2875
|
-
(0 .. count - 1).each do |i|
|
2876
|
-
|
2877
|
-
# Write the c:pt element.
|
2878
|
-
write_pt(i, data[i])
|
2705
|
+
@writer.tag_elements('c:numCache') do
|
2706
|
+
write_format_code('General')
|
2707
|
+
write_pt_count(data.size)
|
2708
|
+
write_pts(data)
|
2879
2709
|
end
|
2880
|
-
|
2881
|
-
@writer.end_tag('c:numCache')
|
2882
2710
|
end
|
2883
2711
|
|
2884
2712
|
#
|
2885
2713
|
# Write the <c:strCache> element.
|
2886
2714
|
#
|
2887
2715
|
def write_str_cache(data) # :nodoc:
|
2888
|
-
|
2889
|
-
|
2890
|
-
|
2891
|
-
|
2892
|
-
# Write the c:ptCount element.
|
2893
|
-
write_pt_count(count)
|
2894
|
-
|
2895
|
-
(0 .. count - 1).each do |i|
|
2896
|
-
|
2897
|
-
# Write the c:pt element.
|
2898
|
-
write_pt(i, data[i])
|
2716
|
+
@writer.tag_elements('c:strCache') do
|
2717
|
+
write_pt_count(data.size)
|
2718
|
+
write_pts(data)
|
2899
2719
|
end
|
2720
|
+
end
|
2900
2721
|
|
2901
|
-
|
2722
|
+
def write_pts(data)
|
2723
|
+
data.each_index { |i| write_pt(i, data[i])}
|
2902
2724
|
end
|
2903
2725
|
|
2904
2726
|
#
|
@@ -2925,12 +2747,7 @@ def write_pt(idx, value) # :nodoc:
|
|
2925
2747
|
|
2926
2748
|
attributes = ['idx', idx]
|
2927
2749
|
|
2928
|
-
@writer.
|
2929
|
-
|
2930
|
-
# Write the c:v element.
|
2931
|
-
write_v(value)
|
2932
|
-
|
2933
|
-
@writer.end_tag('c:pt')
|
2750
|
+
@writer.tag_elements('c:pt', attributes) { write_v(value) }
|
2934
2751
|
end
|
2935
2752
|
|
2936
2753
|
#
|
@@ -2955,18 +2772,14 @@ def write_protection # :nodoc:
|
|
2955
2772
|
def write_d_lbls(labels) # :nodoc:
|
2956
2773
|
return unless labels
|
2957
2774
|
|
2958
|
-
@writer.
|
2959
|
-
|
2960
|
-
|
2961
|
-
|
2962
|
-
|
2963
|
-
|
2964
|
-
|
2965
|
-
|
2966
|
-
# Write the c:showSerName element.
|
2967
|
-
write_show_ser_name if labels[series_name]
|
2968
|
-
|
2969
|
-
@writer.end_tag('c:dLbls')
|
2775
|
+
@writer.tag_elements('c:dLbls') do
|
2776
|
+
# Write the c:showVal element.
|
2777
|
+
write_show_val if labels[value]
|
2778
|
+
# Write the c:showCatName element.
|
2779
|
+
write_show_cat_name if labels[category]
|
2780
|
+
# Write the c:showSerName element.
|
2781
|
+
write_show_ser_name if labels[series_name]
|
2782
|
+
end
|
2970
2783
|
end
|
2971
2784
|
|
2972
2785
|
#
|
@@ -3023,5 +2836,9 @@ def write_c_invert_if_negative(invert = nil) # :nodoc:
|
|
3023
2836
|
|
3024
2837
|
@writer.empty_tag('c:invertIfNegative', attributes)
|
3025
2838
|
end
|
2839
|
+
|
2840
|
+
def nil_or_max?(val)
|
2841
|
+
val.nil? || val == 'max'
|
2842
|
+
end
|
3026
2843
|
end
|
3027
2844
|
end
|