public static void Enable3DChartShadow(this ExcelPieChart chart, int serieIndex, int red, int green, int blue, int sizePer, int blurPt, int distancePt, int angleDgr, int transparencyPer) { var xdoc = chart.ChartXml; var nsm = new XmlNamespaceManager(xdoc.NameTable); // "http://schemas.openxmlformats.org/drawingml/2006/chart" var schemaChart = xdoc.DocumentElement.NamespaceURI; if (nsm.HasNamespace("c") == false) { nsm.AddNamespace("c", schemaChart); } var schemaDrawings = "http://schemas.openxmlformats.org/drawingml/2006/main"; if (nsm.HasNamespace("a") == false) { nsm.AddNamespace("a", schemaDrawings); } // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.plotarea.aspx // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.pie3dchart.aspx // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.piechartseries.aspx // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.index.aspx var ser = xdoc.SelectSingleNode("/c:chartSpace/c:chart/c:plotArea/c:pie3DChart/c:ser[c:idx[@val='" + serieIndex + "']]", nsm); // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.chartshapeproperties.aspx var spPr = ser.SelectSingleNode("./c:spPr", nsm); if (spPr == null) { spPr = ser.AppendElement(schemaChart, "c:spPr"); } // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.effectlist.aspx var effectLst = spPr.AppendElement(schemaDrawings, "a:effectLst"); // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.outershadow.aspx var outerShdw = effectLst.AppendElement(schemaDrawings, "a:outerShdw"); outerShdw.AppendAttribute("sx", (sizePer * SimpleTypes.ST_PERCENTAGE).ToString()); // horizontal scaling factor outerShdw.AppendAttribute("sy", (sizePer * SimpleTypes.ST_PERCENTAGE).ToString()); // vertical scaling factor outerShdw.AppendAttribute("blurRad", (blurPt * EMUUnits.EMU_PER_POINT).ToString()); // blur outerShdw.AppendAttribute("dist", (distancePt * EMUUnits.EMU_PER_POINT).ToString()); // distance outerShdw.AppendAttribute("dir", (angleDgr * SimpleTypes.ST_POSITIVE_FIXED_ANGLE).ToString()); // direction // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.rgbcolormodelhex.aspx var srgbClr = outerShdw.AppendElement(schemaDrawings, "a:srgbClr"); srgbClr.AppendAttribute("val", string.Format("{0:X2}{1:X2}{2:X2}", red, green, blue)); // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.alpha.aspx var alpha = srgbClr.AppendElement(schemaDrawings, "a:alpha"); alpha.AppendAttribute("val", (100 - transparencyPer) + "%"); // alpha = 100% - transparency }
public static void Enable3DChartFormat(this ExcelPieChart chart, int serieIndex, PresetMaterialTypeValues material, int topBevelWidthPt, int topBevelHeightPt, int bottomBevelWidthPt, int bottomBevelHeightPt) { var xdoc = chart.ChartXml; var nsm = new XmlNamespaceManager(xdoc.NameTable); // "http://schemas.openxmlformats.org/drawingml/2006/chart" var schemaChart = xdoc.DocumentElement.NamespaceURI; if (nsm.HasNamespace("c") == false) { nsm.AddNamespace("c", schemaChart); } var schemaDrawings = "http://schemas.openxmlformats.org/drawingml/2006/main"; if (nsm.HasNamespace("a") == false) { nsm.AddNamespace("a", schemaDrawings); } // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.plotarea.aspx // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.pie3dchart.aspx // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.piechartseries.aspx // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.index.aspx var ser = xdoc.SelectSingleNode("/c:chartSpace/c:chart/c:plotArea/c:pie3DChart/c:ser[c:idx[@val='" + serieIndex + "']]", nsm); // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.chartshapeproperties.aspx var spPr = ser.SelectSingleNode("./c:spPr", nsm); if (spPr == null) { spPr = ser.AppendElement(schemaChart, "c:spPr"); } // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.shape3dtype.aspx var sp3d = spPr.AppendElement(schemaDrawings, "a:sp3d"); sp3d.AppendAttribute("prstMaterial", material.StringValue()); // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.beveltop.aspx var bevelT = sp3d.AppendElement(schemaDrawings, "a:bevelT"); bevelT.AppendAttribute("w", (topBevelWidthPt * EMUUnits.EMU_PER_POINT).ToString()); bevelT.AppendAttribute("h", (topBevelHeightPt * EMUUnits.EMU_PER_POINT).ToString()); // https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.bevelbottom.aspx var bevelB = sp3d.AppendElement(schemaDrawings, "a:bevelB"); bevelB.AppendAttribute("w", (bottomBevelWidthPt * EMUUnits.EMU_PER_POINT).ToString()); bevelB.AppendAttribute("h", (bottomBevelHeightPt * EMUUnits.EMU_PER_POINT).ToString()); }
public void fnExportTableToExcel(DataTable dt_ThongSo)// Đưa dữ liệu từ các DataTable ra file excel mới { // Hiện hộp thoại chọn đường dẫn lưu file Excel using (SaveFileDialog saveDialog = new SaveFileDialog()) { saveDialog.Filter = "Excel (Phiên bản 2007 trở lên (.xlsx)|*.xlsx"; if (saveDialog.ShowDialog() != DialogResult.Cancel) { string exportFilePath = saveDialog.FileName; var newFile = new FileInfo(exportFilePath); SplashScreenManager.ShowForm(typeof(frm_DangXuLy)); int n = frm_PhanCum.KMEDOIDS_Cluster.NUM_Cluster; // Số lượng Sheet với nội dung chi tiết từng cụm có trong file excel mới = Số lượng cụm người dùng nhập vào DataTable[] dt_Array = new DataTable[n]; // Mảng 1 chiều DataTable DataRow [] dr_Array = new DataRow[n]; // Mảng 1 chiều DataRow for (int i = 0; i < n; i++) // Mỗi lần lặp tạo ra một DataTable mới, giới hạn lặp là số cụm người dùng nhập vào { dt_Array[i] = new DataTable("DataTable" + i); dt_Array[i].Columns.Add(new DataColumn("f_masv")); // Cột mã sinh viên dt_Array[i].Columns.Add(new DataColumn("f_lop")); // Cột lớp dt_Array[i].Columns.Add(new DataColumn("f_ho")); // Cột họ dt_Array[i].Columns.Add(new DataColumn("f_ten")); // Cột tên dt_Array[i].Columns.Add(new DataColumn("f_dtb", typeof(Double))); // Cột này là Điểm trung bình nên phải là kiểu Double for (int j = 0; j < frm_PhanCum.Subjects.COU_Subjects; j++) // Mỗi lần lặp tạo ra 1 cột môn học, giới hạn lặp là số môn học người dùng chọn khi check vào checkbox { dt_Array[i].Columns.Add(new DataColumn(frm_PhanCum.Subjects.ARR_Subjects[j], typeof(Double))); } dr_Array[i] = dt_Array[i].NewRow(); } for (int i = 0; i < frm_Main.path_src.dt.Rows.Count; i++)// Mỗi lần lặp thêm 1 sinh viên(1 dòng) vào DataTable với số điểm trung bình tương ứng thuộc cụm đó { for (int j = 0; j < n; j++) { if (frm_PhanCum.Students.EXCEL[i, 5] == frm_PhanCum.KMEDOIDS_Center.CENTER[j].ToString()) // EXCEL[i, 5] là nơi lưu tâm cụm của sinh viên từ các môn học đã chọn. CENTER[j] lưu các giá trị tâm cụm { dr_Array[j] = dt_Array[j].NewRow(); // Tạo ra 1 DataRow(1 dòng) mới dr_Array[j]["f_masv"] = frm_PhanCum.Students.EXCEL[i, 0]; dr_Array[j]["f_lop"] = frm_PhanCum.Students.EXCEL[i, 3]; dr_Array[j]["f_ho"] = frm_PhanCum.Students.EXCEL[i, 1]; dr_Array[j]["f_ten"] = frm_PhanCum.Students.EXCEL[i, 2]; dr_Array[j]["f_dtb"] = Math.Round(Convert.ToDouble(frm_PhanCum.Students.EXCEL[i, 4]), 2); for (int k = 0; k < frm_PhanCum.Subjects.COU_Subjects; k++)// Mỗi lần lặp gán vào các ô từ ô thứ 6 trở đi là điểm của từng môn người dùng chọn ứng với sinh viên đó. { dr_Array[j][frm_PhanCum.Subjects.ARR_Subjects[k]] = frm_PhanCum.Students.EXCEL[i, 6 + k]; } dt_Array[j].Rows.Add(dr_Array[j]); } } } using (var package = new ExcelPackage(newFile)) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Thông số các cụm");// Tạo Sheet chứa thông số các cụm int colIndex = 1; foreach (DataColumn dc in dt_ThongSo.Columns) //Tạo các Header { var cell = worksheet.Cells[1, colIndex]; var fill = cell.Style.Fill; // Tạo định dạng fill.PatternType = ExcelFillStyle.Solid; fill.BackgroundColor.SetColor(Color.Green); for (int j = 1; j < frm_PhanCum.KMEDOIDS_Cluster.NUM_Cluster + 2; j++) { var cell_PC = worksheet.Cells[j, colIndex]; var border_PC = cell_PC.Style.Border; border_PC.Bottom.Style = border_PC.Top.Style = border_PC.Left.Style = border_PC.Right.Style = ExcelBorderStyle.Thin; cell_PC.Value = dc.ColumnName; } colIndex++; } //--------------------------------------Sheet đầu tiên--------------------------------------// worksheet.Cells["A1"].LoadFromDataTable(dt_ThongSo, true, TableStyles.None); //--------------------Xuat Bieu Do--------------------// // Biểu đồ cột OfficeOpenXml.Drawing.Chart.ExcelChart chart = (OfficeOpenXml.Drawing.Chart.ExcelChart)worksheet.Drawings.AddChart("chart_1", OfficeOpenXml.Drawing.Chart.eChartType.ColumnStacked); chart.SetPosition(10, 300); chart.Title.Text = "Biểu đồ cột"; chart.Title.Font.Bold = true; chart.Title.Font.Size = 12; chart.SetSize(500, 400); var series = (ExcelChartSerie)(chart.Series.Add(worksheet.Cells[2, 3, dt_ThongSo.Rows.Count + 1, 3], worksheet.Cells[2, 1, dt_ThongSo.Rows.Count + 1, 1])); series.Header = "Số PT"; chart.Legend.Add(); chart.Legend.Border.Width = 0; chart.Legend.Font.Size = 12; chart.Legend.Font.Bold = true; chart.Legend.Position = eLegendPosition.Right; // Biểu đồ tròn OfficeOpenXml.Drawing.Chart.ExcelPieChart chart_pie = (OfficeOpenXml.Drawing.Chart.ExcelPieChart)worksheet.Drawings.AddChart("chart_2", OfficeOpenXml.Drawing.Chart.eChartType.Pie); chart_pie.SetPosition(10, 810); chart_pie.Title.Text = "Biểu đồ tròn"; chart_pie.Title.Font.Bold = true; chart_pie.Title.Font.Size = 12; chart_pie.SetSize(500, 400); var series_pie = (ExcelPieChartSerie)(chart_pie.Series.Add(worksheet.Cells[2, 4, dt_ThongSo.Rows.Count + 1, 4], worksheet.Cells[2, 1, dt_ThongSo.Rows.Count + 1, 1])); var pieSeries = (ExcelPieChartSerie)series_pie; pieSeries.Explosion = 5; //Format the labels pieSeries.DataLabel.Font.Bold = true; pieSeries.DataLabel.ShowValue = true; pieSeries.DataLabel.ShowLeaderLines = true; pieSeries.DataLabel.Position = eLabelPosition.OutEnd; chart_pie.Legend.Add(); chart_pie.Legend.Border.Width = 0; chart_pie.Legend.Font.Size = 12; chart_pie.Legend.Font.Bold = true; chart_pie.Legend.Position = eLegendPosition.Right; //-------------------------------------Sheet thứ hai trở đi--------------------------------------// ExcelWorksheet[] Sheet = new ExcelWorksheet[n]; for (int i = 0; i < n; i++) { Sheet[i] = package.Workbook.Worksheets.Add("Chi tiết cụm " + (i + 1).ToString()); int colIndex1 = 1; foreach (DataColumn dc in dt_Array[i].Columns) //Creating Headings { var cell1 = Sheet[i].Cells[1, colIndex1]; var fill = cell1.Style.Fill; fill.PatternType = ExcelFillStyle.Solid; fill.BackgroundColor.SetColor(Color.Green); for (int j = 1; j < frm_PhanCum.KMEDOIDS_Center.COU_Vector[i] + 2; j++) { var cell_N = Sheet[i].Cells[j, colIndex1]; var border = cell_N.Style.Border; border.Bottom.Style = border.Top.Style = border.Left.Style = border.Right.Style = ExcelBorderStyle.Thin; cell_N.Value = dc.ColumnName; } colIndex1++; } Sheet[i].Cells["A1"].LoadFromDataTable(dt_Array[i], true, TableStyles.None); } package.Save(); SplashScreenManager.CloseForm(); XtraMessageBox.Show("Tạo file excel thành công !", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); ProcessStartInfo pi = new ProcessStartInfo(exportFilePath); Process.Start(pi); } } } }