/** * 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(); }
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; }
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; }
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; }