计算WPF中excel列的dynamic单元格/行的总和

请问,有什么办法可以合计(总结)给定列的单元格(行)的内容,其行数(单元格)是dynamic的,也就是行数不固定,一个Excel工作表? 我一直在尝试没有任何有意义的结果,我试图使用偏移量,但不断从HRESULT等等得到一些COM_Exception等等……

下面是试图用于实现我的目的的演示代码的一部分。

请高度赞赏任何build议(与代码片段)。

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; } 

我不相信xlWorkSheet.Cells.Offset[i, 0].Value2是有效的。 而不是使用Offset ,只要坚持Cells(i, 1).Value2 。 让我知道这是否适合你。

没关系,我已经能够自己做。 对于像我这样可能遇到这种问题的人来说,在这里,你去:

  int numRows = 0; double sum = 0; double Average = 0; excel.Range count = xlWorkSheet.UsedRange.Columns["A", misValue] as excel.Range; foreach (excel.Range cell in count.Cells) { if (cell.Value2 != null && cell.Value2 is double?) { sum += cell.Value2; numRows += 1; } } Average = sum / numRows; txtAverage.Text = Average.ToString(); 

//“&&”是非常必要的,以避免添加一个单元格的值(可能是一个string – 像一个列的头)加倍,以避免出现错误。