none
WPF 读取excel数据的问题 RRS feed

  • 问题

  •  WPF 平台下读取表格数据,这是代码:

     Microsoft.Win32.OpenFileDialog File = new Microsoft.Win32.OpenFileDialog();
                  File.Title = "打开对话框";
                  File.Filter = "表格文件|*.xlsx";
                  bool? m = File.ShowDialog();
                  if (m == true)//
                  {                                       

                      Microsoft.Office.Interop.Excel.Application newwork = new Microsoft.Office.Interop.Excel.Application();
                      Microsoft.Office.Interop.Excel.Workbook excelsheet = newwork.Workbooks.Open(File.FileName, System.Type.Missing);
                      Microsoft.Office.Interop.Excel.Worksheet excelWS = (Microsoft.Office.Interop.Excel.Worksheet)excelsheet.Worksheets[1];
                      DataSeries dataseries = new DataSeries();
    for (int i = 0;  excelWS.Cells[i+1,1] != null; i++)
                      {
                          DataPoint datapoint = new DataPoint();
      datapoint.YValue = excelWS.Cells[i+1,1];
                          dataseries.DataPoints.Add(datapoint);
                       }

         dataSeries1.RenderAs = RenderAs.Line;
                      dataSeries1.Color = colorlabel1.Background;
                      dataSeries1.LightWeight = true;
                      chart.Series.Add(dataSeries1);
                      excelWS = null;
                      excelsheet.Close();
                      newwork.Quit();

     请问这段代码中加下划线的部分有什么问题?为什么给点的Y值赋值不能成功。请指教


    2014年3月26日 3:24

答案

全部回复

  • 你这个问题不是很明确呀!DataSeries是一个控件上面的吧。这个其实很Excel没有关系了。你成功的读取Excel数据后给他赋值时出的问题。DataSeries是哪个控件的?这样才能分析问题。还有这么多代码太少了。也看不出问题。
    2014年3月26日 6:16
  • 你好,

    首先你需要确认DataSeriesYValue的数据类型。如果赋值5YValue不报错,那YValue接受的数据类型应该是数值类型的。你需要将Excel中的值转化一下。

    for (int i = 0;  excelWS.Cells[i+1,1] != null; i++)
    {
    	DataPoint datapoint = new DataPoint();
    	datapoint.YValue = Convert.ToInt32(excelWS.Cells[i, 1].Value);
    	dataseries.DataPoints.Add(datapoint);
    }

    你需要给这些代码加一些异常处理。谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年3月26日 6:56
    版主
  • 你好,

    首先你需要确认DataSeriesYValue的数据类型。如果赋值5YValue不报错,那YValue接受的数据类型应该是数值类型的。你需要将Excel中的值转化一下。

    for (int i = 0;  excelWS.Cells[i+1,1] != null; i++)
    {
    	DataPoint datapoint = new DataPoint();
    	datapoint.YValue = Convert.ToInt32(excelWS.Cells[i, 1].Value);
    	dataseries.DataPoints.Add(datapoint);
    }

    你需要给这些代码加一些异常处理。谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    还是不行啊,运行不了
    2014年3月26日 7:27
  • 你这个问题不是很明确呀!DataSeries是一个控件上面的吧。这个其实很Excel没有关系了。你成功的读取Excel数据后给他赋值时出的问题。DataSeries是哪个控件的?这样才能分析问题。还有这么多代码太少了。也看不出问题。
     您看一下  我补充了一部分代码
    2014年3月26日 7:28
  • Hi,如果出错,最好把错误信息也贴出来,这样才有利于你的问题的解决。

    DataPoint.YValue是double类型的,所以你可以尝试把值转换成double,如下所示:

                Microsoft.Office.Interop.Excel.Application newwork = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook excelsheet = newwork.Workbooks.Open(File.FileName, System.Type.Missing);
                Microsoft.Office.Interop.Excel.Worksheet excelWS = (Microsoft.Office.Interop.Excel.Worksheet)excelsheet.Worksheets[1];
                DataSeries dataseries = new DataSeries();
                for (int i = 0; excelWS.Cells[i + 1, 1].Value != null; i++)
                {
                    double value;
                    if (Double.TryParse(excelWS.Cells[i + 1, 1].Value.ToString(), out value))
                    {
                        DataPoint datapoint = new DataPoint();
                        datapoint.YValue = value;
                        dataseries.DataPoints.Add(datapoint);
                    }              
                }


    • 已编辑 lapheal 2014年3月26日 8:02
    2014年3月26日 7:40
  • Hi,如果出错,最好把错误信息也贴出来,这样才有利于你的问题的解决。

    DataPoint.YValue是double类型的,所以你可以尝试把值转换成double,如下所示:

                Microsoft.Office.Interop.Excel.Application newwork = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook excelsheet = newwork.Workbooks.Open("d:\\22.xlsx");
                Microsoft.Office.Interop.Excel.Worksheet excelWS = (Microsoft.Office.Interop.Excel.Worksheet)excelsheet.Worksheets[1];
                DataSeries dataseries = new DataSeries();
                for (int i = 0; excelWS.Cells[i + 1, 1].Value != null; i++)
                {
                    double value;
                    if (Double.TryParse(excelWS.Cells[i + 1, 1].Value.ToString(), out value))
                    {
                        DataPoint datapoint = new DataPoint();
                        datapoint.YValue = value;
                        dataseries.DataPoints.Add(datapoint);
                    }              
                }

    运行不了
    2014年3月26日 7:54
  • 运行不了,给异常信息!


    2014年3月26日 9:23
  • 问题解决了吗?
    2014年3月31日 7:59
  • 你好,

    这个问题应该是数据类型不一致造成的。我查找了VISIfire控件的例子,你可以参考下:

    http://www.visifire.com/documentation/Visifire_Documentation/Charts/Samples/WPF/WPF_Sample.htm

    我查询了DataPoint YValueAPI,你可以从VISIfire的官网上查找到,

    http://www.visifire.com/documentation/Visifire_Documentation/Charts/Reference/Attribute_Reference/DataPoints.htm

    下面的截图是这个API的信息:

    另外这个问题建议你到VISIfire上去提问,

    http://forums.visifire.com/

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年4月1日 6:30
    版主