public void getLineChart() { ExcelScatterChart lineChart = sheet1.Drawings["Chart1"] as ExcelScatterChart; var serie11 = lineChart.Series[0]; var serie22 = lineChart.Series[1]; serie11.Series = sheet1.Cells[2, 2, 1024, 2].FullAddress; serie11.XSeries = sheet1.Cells[2, 1, 1024, 1].FullAddress; serie11.Header = "YDec"; serie22.Series = sheet1.Cells[2, 3, 1024, 3].FullAddress; serie22.XSeries = sheet1.Cells[2, 1, 1024, 1].FullAddress; serie22.DataLabel.ShowLeaderLines = true; serie22.Header = "MAX"; serie22.DataLabel.Position = eLabelPosition.Left; /* * lineChart.Series.Delete(0); * lineChart.Series.Delete(0); * * var serie1 = lineChart.Series.Add(sheet1.Cells[2,2,1024,2], sheet1.Cells[2,1,1024,1]); * serie1.Header = "YDec"; * serie1.DataLabel.ShowValue = false; * * var serie2 = lineChart.Series.Add(sheet1.Cells[2, 3, 1024, 3], sheet1.Cells[2, 1, 1024, 1]); * serie2.Header = "MAX"; * serie2.DataLabel.Position = eLabelPosition.Left; * serie2.DataLabel.ShowValue = true; * serie2.DataLabel.ShowLeaderLines = true; * * //serie2.DataLabel.ShowLeaderLines * lineChart.SetPosition(2, 2, 6, 0); * lineChart.SetSize(600, 400); */ }
public ExcelObject(ExcelObject template, string path, string name) { const string extension = ".xlsx"; string originalPath = template.path_; string resPath = path + "\\" + name + extension; // Looking for an available name if a template equals a resulting file if (Path.GetFileNameWithoutExtension(originalPath).Equals(name)) { bool isAvailable = false; while (!isAvailable) { name += "-copy"; resPath = path + "\\" + name + extension; isAvailable = !(new FileInfo(name).Exists); } } // Try creating an Excel instance createExcelInstance(originalPath, resPath, name, extension); Copy(new ExcelObject(resPath)); // Delete the data worksheet if existed ExcelWorkbook book = package_.Workbook; foreach (ExcelWorksheet sheet in book.Worksheets) { if (sheet.Name.Equals(workSheetName_)) { book.Worksheets.Delete(workSheetName_); break; } } // Add a new one workSheet_ = book.Worksheets.Add(workSheetName_); posCharts_ = new Dictionary <ExcelDrawing, ChartPosition>(); path_ = resPath; // Clear all the series foreach (ExcelDrawing objChart in charts_) { ExcelScatterChart chart = (ExcelScatterChart)objChart; while (chart.Series.Count > 0) { chart.Series.Delete(0); } } }
public void addSeries(string chartName, double[,] data, string dataName, string infoChart = "", string infoData = "") { // Finding the chart ExcelDrawing objChart = null; int nCharts = charts_.Count; for (int i = 0; i != nCharts; ++i) { ExcelDrawing chart = charts_[i]; if (chart.Name == chartName) { objChart = chart; lastSheet_ = chartSheets_[i]; break; } } if (objChart == null) { return; } // Check if the chart is currently in use ChartPosition pos; int iRow, jCol; if (!posCharts_.ContainsKey(objChart)) { pos = new ChartPosition() { header = new Position { row = ChartPosition.lastRow + 1, col = 1 }, length = data.GetLength(0), availablePosition = new Position { row = ChartPosition.lastRow + 3, col = 1 } }; // Write the header workSheet_.Cells[pos.header.row, pos.header.col].Value = objChart.Name + infoChart; posCharts_.Add(objChart, pos); ChartPosition.lastRow += pos.length + 3; } else { pos = posCharts_[objChart]; } // Add the function values iRow = pos.availablePosition.row; jCol = pos.availablePosition.col; int nData = data.GetLength(0); for (int k = 0; k != nData; ++k) { workSheet_.Cells[iRow + k, jCol].Value = data[k, 0]; workSheet_.Cells[iRow + k, jCol + 1].Value = data[k, 1]; } workSheet_.Cells[pos.header.row + 1, jCol].Value = infoData; // Set the data info workSheet_.Cells[pos.header.row + 1, jCol + 1].Value = dataName; // Set the name // Retrieving the data address ExcelScatterChart scatterChart = (ExcelScatterChart)objChart; string xVals = ExcelRange.GetAddress(iRow, jCol, iRow + nData - 1, jCol); string yVals = ExcelRange.GetAddress(iRow, jCol + 1, iRow + nData - 1, jCol + 1); xVals = ExcelRange.GetFullAddress(workSheetName_, xVals); yVals = ExcelRange.GetFullAddress(workSheetName_, yVals); // Creating the serie ExcelScatterChartSerie serie = scatterChart.Series.Add(yVals, xVals); // Using the standard markers when custom ones are not available List <MarkerProperty> markers = customMarkers_[chartName]; if (markers == null || markers.Count == 0) { markers = standardMarkers_; } MarkerProperty markerProperties = markers[indMarkers_[chartName]]; // Using the standard lines when custom ones are not available List <LineProperty> lines = customLines_[chartName]; if (lines == null || lines.Count == 0) { lines = standardLines_; } LineProperty lineProperties = lines[indLines_[chartName]]; int transparency = lineProperties.isTransparent ? 100 : 0; // Perecentage // Specifying the properties serie.Border.Fill.Color = Color.Black; // Line color serie.Border.LineStyle = lineProperties.lineStyle; // Line style serie.Border.Fill.Transparancy = transparency; // Line transparency serie.Border.Width = 1.0; // Line width if (serie.Marker != null) { serie.Marker.Border.Fill.Color = Color.Black; // Marker border color serie.Marker.Border.Width = 0.75; // Marker border width serie.Marker.Size = 5; // Marker size // Marker fill color if (markerProperties.fillColor != Color.Transparent) { serie.Marker.Fill.Color = markerProperties.fillColor; } else { serie.Marker.Fill.Style = eFillStyle.NoFill; } // Marker style if (lineProperties.isMarkersEnabled) { serie.Marker.Style = markerProperties.style; } else { serie.Marker.Style = eMarkerStyle.None; } // Increment markers and lines indices ++indMarkers_[chartName]; if (indMarkers_[chartName] >= markers.Count) { indMarkers_[chartName] = 0; } } ++indLines_[chartName]; if (indLines_[chartName] >= lines.Count) { indLines_[chartName] = 0; } // Legend serie.Header = dataName; // Shifting data locations pos.availablePosition.col = pos.availablePosition.col + 2; pos.length = Math.Max(pos.length, nData); int lastRowColumn = pos.availablePosition.row + pos.length; if (lastRowColumn > ChartPosition.lastRow) { ChartPosition.lastRow = lastRowColumn; } }