Example #1
0
        /**
         * Returns all the charts for the given sheet.
         * 
         * NOTE: You won't be able to do very much with
         *  these charts yet, as this is very limited support
         */
        public static HSSFChart[] GetSheetCharts(HSSFSheet sheet)
        {
            List<HSSFChart> charts = new List<HSSFChart>();
            HSSFChart lastChart = null;
            HSSFSeries lastSeries = null;
            // Find records of interest
            IList records = sheet.Sheet.Records;
            foreach (RecordBase r in records)
            {

                if (r is ChartRecord)
                {
                    lastSeries = null;

                    lastChart = new HSSFChart(sheet, (ChartRecord)r);
                    charts.Add(lastChart);
                }
                else if (r is LegendRecord)
                {
                    lastChart.legendRecord = (LegendRecord)r;
                }
                else if (r is SeriesRecord)
                {
                    HSSFSeries series = new HSSFSeries((SeriesRecord)r);
                    lastChart.series.Add(series);
                    lastSeries = series;
                }
                else if (r is AlRunsRecord)
                {
                    lastChart.chartTitleFormat =
                        (AlRunsRecord)r;
                }
                else if (r is SeriesTextRecord)
                {
                    // Applies to a series, unless we've seen
                    //  a legend already
                    SeriesTextRecord str = (SeriesTextRecord)r;
                    if (lastChart.legendRecord == null &&
                            lastChart.series.Count > 0)
                    {
                        HSSFSeries series = (HSSFSeries)
                            lastChart.series[lastChart.series.Count - 1];
                        series.seriesTitleText = str;
                    }
                    else
                    {
                        lastChart.chartTitleText = str;
                    }
                }
                else if (r is BRAIRecord)
                {
                    BRAIRecord linkedDataRecord = (BRAIRecord)r;
                    if (lastSeries != null)
                    {
                        lastSeries.InsertData(linkedDataRecord);
                    }
                }
                else if (r is ValueRangeRecord)
                {
                    lastChart.valueRanges.Add((ValueRangeRecord)r);
                }
                else if (r is Record)
                {
                    if (lastChart != null)
                    {
                        Record record = (Record)r;
                        foreach (int type in Enum.GetValues(typeof(HSSFChartType)))
                        {
                            if (type == 0)
                            {
                                continue;
                            }
                            if (record.Sid == type)
                            {
                                lastChart.type = (HSSFChartType)type;
                                break;
                            }
                        }
                    }
                }
            }

            return (HSSFChart[])
                charts.ToArray();
        }
Example #2
0
        public HSSFSeries CreateSeries()
        {
            List<RecordBase> seriesTemplate = new List<RecordBase>();
            bool seriesTemplateFilled = false;

            int idx = 0;
            int deep = 0;
            int chartRecordIdx = -1;
            int chartDeep = -1;
            int lastSeriesDeep = -1;
            int endSeriesRecordIdx = -1;
            int seriesIdx = 0;
            IList records = sheet.Sheet.Records;

            /* store first series as template and find last series index */
            foreach (RecordBase record in records)
            {

                idx++;

                if (record is BeginRecord)
                {
                    deep++;
                }
                else if (record is EndRecord)
                {
                    deep--;

                    if (lastSeriesDeep == deep)
                    {
                        lastSeriesDeep = -1;
                        endSeriesRecordIdx = idx;
                        if (!seriesTemplateFilled)
                        {
                            seriesTemplate.Add(record);
                            seriesTemplateFilled = true;
                        }
                    }

                    if (chartDeep == deep)
                    {
                        break;
                    }
                }

                if (record is ChartRecord)
                {
                    if (record == chartRecord)
                    {
                        chartRecordIdx = idx;
                        chartDeep = deep;
                    }
                }
                else if (record is SeriesRecord)
                {
                    if (chartRecordIdx != -1)
                    {
                        seriesIdx++;
                        lastSeriesDeep = deep;
                    }
                }

                if (lastSeriesDeep != -1 && !seriesTemplateFilled)
                {
                    seriesTemplate.Add(record);
                }
            }

            /* check if a series was found */
            if (endSeriesRecordIdx == -1)
            {
                return null;
            }

            /* next index in the records list where the new series can be inserted */
            idx = endSeriesRecordIdx + 1;

            HSSFSeries newSeries = null;

            /* duplicate record of the template series */
            List<RecordBase> ClonedRecords = new List<RecordBase>();
            foreach (RecordBase record in seriesTemplate)
            {

                Record newRecord = null;

                if (record is BeginRecord)
                {
                    newRecord = new BeginRecord();
                }
                else if (record is EndRecord)
                {
                    newRecord = new EndRecord();
                }
                else if (record is SeriesRecord)
                {
                    SeriesRecord seriesRecord = (SeriesRecord)((SeriesRecord)record).Clone();
                    newSeries = new HSSFSeries(seriesRecord);
                    newRecord = seriesRecord;
                }
                else if (record is BRAIRecord)
                {
                    BRAIRecord linkedDataRecord = (BRAIRecord)((BRAIRecord)record).Clone();
                    if (newSeries != null)
                    {
                        newSeries.InsertData(linkedDataRecord);
                    }
                    newRecord = linkedDataRecord;
                }
                else if (record is DataFormatRecord)
                {
                    DataFormatRecord dataFormatRecord = (DataFormatRecord)((DataFormatRecord)record).Clone();

                    dataFormatRecord.SeriesIndex = ((short)seriesIdx);
                    dataFormatRecord.SeriesNumber = ((short)seriesIdx);

                    newRecord = dataFormatRecord;
                }
                else if (record is SeriesTextRecord)
                {
                    SeriesTextRecord seriesTextRecord = (SeriesTextRecord)((SeriesTextRecord)record).Clone();
                    if (newSeries != null)
                    {
                        newSeries.SetSeriesTitleText(seriesTextRecord);
                    }
                    newRecord = seriesTextRecord;
                }
                else if (record is Record)
                {
                    newRecord = (Record)((Record)record).Clone();
                }

                if (newRecord != null)
                {
                    ClonedRecords.Add(newRecord);
                }
            }

            /* check if a user model series object was Created */
            if (newSeries == null)
            {
                return null;
            }

            /* transfer series to record list */
            foreach (RecordBase record in ClonedRecords)
            {
                records.Insert(idx++, record);
            }

            return newSeries;
        }
Example #3
0
        public bool RemoveSeries(HSSFSeries series)
        {
            int idx = 0;
            int deep = 0;
            int chartDeep = -1;
            int lastSeriesDeep = -1;
            int seriesIdx = -1;
            bool RemoveSeries = false;
            bool chartEntered = false;
            bool result = false;
            IList records = sheet.Sheet.Records;

            /* store first series as template and find last series index */

            IEnumerator iter = records.GetEnumerator();
            while (iter.MoveNext())
            {
                RecordBase record = (RecordBase)iter.Current;
                idx++;

                if (record is BeginRecord)
                {
                    deep++;
                }
                else if (record is EndRecord)
                {
                    deep--;

                    if (lastSeriesDeep == deep)
                    {
                        lastSeriesDeep = -1;

                        if (RemoveSeries)
                        {
                            RemoveSeries = false;
                            result = true;
                            records.Remove(record);
                        }
                    }

                    if (chartDeep == deep)
                    {
                        break;
                    }
                }

                if (record is ChartRecord)
                {
                    if (record == chartRecord)
                    {
                        chartDeep = deep;
                        chartEntered = true;
                    }
                }
                else if (record is SeriesRecord)
                {
                    if (chartEntered)
                    {
                        if (series.series == record)
                        {
                            lastSeriesDeep = deep;
                            RemoveSeries = true;
                        }
                        else
                        {
                            seriesIdx++;
                        }
                    }
                }
                else if (record is DataFormatRecord)
                {
                    if (chartEntered && !RemoveSeries)
                    {
                        DataFormatRecord dataFormatRecord = (DataFormatRecord)record;
                        dataFormatRecord.SeriesIndex = ((short)seriesIdx);
                        dataFormatRecord.SeriesNumber = ((short)seriesIdx);
                    }
                }

                if (RemoveSeries)
                {
                    records.Remove(record);
                }
            }

            return result;
        }
Example #4
0
	public bool RemoveSeries(HSSFSeries series) {
		int idx = 0;
		int deep = 0;
		int chartDeep = -1;
		int lastSeriesDeep = -1;
		int seriesIdx = -1;
		bool removeSeries = false;
		bool chartEntered = false;
		bool result = false;
		 List<RecordBase> records = sheet.GetSheet().GetRecords();
		
		/* store first series as template and find last series index */
		Iterator<RecordBase> iter = records.Iterator();
		while (iter.HasNext()) {		
			RecordBase record = iter.Next();
			idx++;
			
			if (record is BeginRecord) {
				deep++;
			} else if (record is EndRecord) {
				deep--;
				
				if (lastSeriesDeep == deep) {
					lastSeriesDeep = -1;
					
					if (removeSeries) {
						removeSeries = false;
						result = true;
						iter.Remove();
					}
				}
				
				if (chartDeep == deep) {
					break;
				}
			}
			
			if (record is ChartRecord) {
				if (record == chartRecord) {
					chartDeep = deep;
					chartEntered = true;
				}
			} else if (record is SeriesRecord) {
				if (chartEntered) {
					if (series.series == record) {
						lastSeriesDeep = deep;
						removeSeries = true;
					} else {
						seriesIdx++;
					}
				}
			} else if (record is DataFormatRecord) {
				if (chartEntered && !removeSeries) {
					DataFormatRecord dataFormatRecord = (DataFormatRecord) record;
					dataFormatRecord.SetSeriesIndex((short) seriesIdx);
					dataFormatRecord.SetSeriesNumber((short) seriesIdx);
				}
			}
			
			if (removeSeries) {
				iter.Remove();
			}
		}
		
		return result;
	}