【发布时间】:2015-10-26 20:27:14
【问题描述】:
我目前正在通过 EPPlus 创建 Excel 电子表格,数据基本上分为部分、问题、回复,每个部分都是另一个的子集,我不知道每个部分可能有多少问题,所以一切需要通过循环来完成。
我想要的是文档包含一个工作表,其中显示每个问题的图表,给出答案的细分。
我非常接近让它正常工作,但我的代码中的某些东西导致了问题,我无法弄清楚它是什么。
我目前正在处理的数据包含 10 个问题,所有图表都已绘制,但最后一个图表直接位于第一个图表的顶部。我在正确定位文本结果方面也遇到了问题,但由于该代码取决于图表的代码,我希望对图表进行排序将帮助我对结果进行排序。
这是我的代码:
Int32 chartPaddingX = 50;
Int32 chartPaddingY = 200;
Int32 chartW = 320;
Int32 chartH = 200;
Int32 chartXCount = 0;
Int32 chartYCount = 1;
Int32 marginTop = 0;
Int32 marginLeft = 0;
Int32 resultsControlVar = 0;
Int32 numCharts = 0;
Int32 rnStart = 14;
chartXCount = 0;
chartYCount = 0;
chartPaddingX = 50;
rowNum = y = 14;
colNum = 2;
String title = section.First().title.ToString();
ExcelWorksheet ws = pkg.Workbook.Worksheets.Add(title);
int idx = 0;
foreach (var question in results.questions.Where(q => q.section_guid == section.Key))
{
var chart = ws.Drawings.AddChart(question.question.ToString(), OfficeOpenXml.Drawing.Chart.eChartType.ColumnClustered);
chart.SetSize(chartW, chartH);
chart.Title.Text = question.question.ToString();
chart.Legend.Add();
marginLeft = (chartW + chartPaddingX) * chartXCount;
// SET CHART PLACEMENT
if (numCharts == 0)
{
marginTop = 50;
}
else if ((numCharts <= 3) && (numCharts != 0))
{
marginTop = 50;
}
else if (numCharts > 3)
{
marginTop = ((chartH + chartPaddingY) * chartYCount) + 50;
}
else
{
marginTop = (chartH + chartPaddingY) * chartYCount;
}
if (chartXCount >= 3)
{
chart.SetPosition(marginTop, 50);
chartYCount++;
chartXCount = 0;
resultsControlVar = 1;
}
else
{
chart.SetPosition(marginTop, marginLeft + 50);
}
chartXCount++;
numCharts++;
...... Add results data and chart series ......
if (resultsControlVar == 1)
{
rowNum = rnStart;
rowNum = rowNum + 20;
rnStart = rowNum;
colNum = 2;
resultsControlVar = 0;
}
else
{
rowNum = rnStart;
colNum = colNum + 6;
}
} // close foreach
【问题讨论】: