请问,有没有什么办法可以合计(总结)给定列的单元格(行)的内容,其中可能的行数单元格)是动态的,也就是说,行数不固定,在Excel工作表中?我一直在尝试没有任何有意义的结果,我尝试使用偏移量,但继续从HRESULT等等一些COM_Exception等等......计算WPF中excel列的动态单元格/行的总和
下面是试图用于实现我的目的的演示代码的一部分。
请高度赞赏任何建议(与代码片段)。
private void button1_Click(object sender, RoutedEventArgs e)
{
excel.Application xlApp;
excel.Workbook xlWorkBook;
excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new excel.Application();
var MyExcel = new excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
excel.Range chartRange;
chartRange = xlWorkSheet.get_Range("$A:$A", Type.Missing);
xlWorkSheet.Cells[1, 1] = "Temperature(deg)";
xlWorkSheet.Cells[1, 2] = "Humidity(m-3)";
xlWorkSheet.Cells[1, 3] = "Wind Speed(m/s)";
xlWorkSheet.Cells[2, 1] = 33;
xlWorkSheet.Cells[2, 2] = 45;
xlWorkSheet.Cells[2, 3] = 34;
xlWorkSheet.Cells[3, 1] = 23;
xlWorkSheet.Cells[3, 2] = 26;
xlWorkSheet.Cells[3, 3] = 43;
xlWorkSheet.Cells[4, 1] = 45;
xlWorkSheet.Cells[4, 2] = 24;
xlWorkSheet.Cells[4, 3] = 34;
xlWorkSheet.Cells[5, 1] = 40;
xlWorkSheet.Cells[5, 2] = 32;
xlWorkSheet.Cells[5, 3] = 42;
decimal fdt = 0;
int i = 2;
excel.Range targetRange = (excel.Range)xlWorkSheet.Cells[2, 1];
while (xlWorkSheet.Cells.Offset[i, 0].Value2 != null)
{
i++;
fdt += xlWorkSheet.Cells.Offset[i, 0].Value2;
}
MessageBox.Show(fdt.ToString());
excel.ChartObjects xlCharts = (excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
excel.ChartObject myChart = (excel.ChartObject)xlCharts.Add(400, 50, 400, 300);
excel.Chart chartPage = myChart.Chart;
chartPage.SetSourceData(chartRange, misValue);
chartPage.ChartType = excel.XlChartType.xl3DColumnClustered;
try
{
myChart.Chart.HasTitle = true;
excel.Range objRange = (excel.Range)xlWorkSheet.Cells["$A:$A", Type.Missing];
String strData = objRange.get_Value(misValue).ToString();
myChart.Chart.ChartTitle.Text = strData;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
xlWorkBook.SaveAs("DemoChart_1.xls", excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue,
excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlApp.Visible = true;
}
感谢您的回复,但使用您的建议为:while(xlWorkSheet.Cells [i,1]!= null)//其中i = 2且在while循环内{i ++; targetRange.Value2 + = xlWorkSheet.Cells [i,1] .Value2; }这次给了我一个空输出......我想我需要增加一点努力使它按照我想要的方式工作,但实际上并不知道该怎么做。我真的卡住了。 – 2012-04-30 10:22:12
你试图总结什么专栏? 'Cells [i,1]'是第一列(“A”)。此外,你可以尝试不使用'.Value2',但我今天晚些时候将在WPF中尝试它。祝你好运! – Zairja 2012-04-30 12:45:26
是的,这是第一个尝试Sum的列。我是让我迭代或循环通过A列的行。好的,我会耐心等待您的反馈。 – 2012-04-30 13:56:15