使用excel电子表格作为报表查看器的数据源c#

问题描述 投票:0回答:4

我正在尝试使用Visual Studio(Windows窗体应用程序)提供的

reportviewer
来创建基于Excel电子表格的报告。然而,我正在努力寻找读取/访问电子表格的正确方法。

当我尝试创建新报告时,我会看到以下窗口:

New report data source

我尝试过使用对象选项,但没有任何运气

问题: 如何使用 Excel 电子表格创建报告?

我很幸运地使用了以下代码,这使我能够处理该文件,但我找不到将其绑定到报告查看器中的方法:

Excel.Application ExcelObj = new Excel.Application();

this.openFileDialog1.FileName = "*.xls";
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
    Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(
        openFileDialog1.FileName, 0, true, 5,
        "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false,
        0, true);
    Excel.Sheets sheets = theWorkbook.Worksheets;
    Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
    for (int i = 1; i <= 10; i++)
    {
        Excel.Range range = worksheet.get_Range("A" + i.ToString(), "J" + i.ToString());
        System.Array myvalues = (System.Array)range.Cells.Value;
        string[] strArray = ConvertToStringArray(myvalues);
    }
}

欢迎任何建议/指导

c# excel visual-studio datasource reportviewer
4个回答
6
投票

经过大量谷歌搜索后,我设法将其拼凑在一起,并将 Excel 工作表放入基本报告中。

这需要您使用 Excel 电子表格第一行中指定的列名称设置数据集,并将该数据集绑定到报告中。然后您可以使用以下内容来填充它:

[open file dialog code..]
try
{
    string path = this.openFileDialog1.FileName;
    if (Path.GetExtension(path) == ".xls")
    {
        oledbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"");
    }
    else if (Path.GetExtension(path) == ".xlsx")
    {
        oledbConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;';");
    }
    oledbConn.Open();

    DataSet ds = new DataSet();

    OleDbCommand cmd = new OleDbCommand();
    cmd.Connection = oledbConn;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT * FROM [sheet1$]";

    OleDbDataAdapter oleda = new OleDbDataAdapter();
    oleda = new OleDbDataAdapter(cmd);
    oleda.Fill(ds);
    ds.Tables[0].TableName = "DataTable1";

    this.DataTable1BindingSource.DataSource = ds;
    this.reportViewer1.RefreshReport();
}
catch (Exception ex)
{
}
finally
{
    oledbConn.Close();
}

我发现这些文章很有帮助:

动态报告来源

将 Excel 加载到数据集中


2
投票

您可以查询这个问题中提到的数据。

在c#中查询excel表格

但我建议尝试创建一个过程来从 Excel 文件获取数据并移动到 SQL Server 或任何正式数据库。在此过程中您可以验证数据格式并消除错误。


2
投票

对于 Visual Studio 的某些部分,通过选择 Database 将电子表格连接为数据源。 ODBC 驱动程序允许将多种数据库(包括 Excel 电子表格文件)用作数据源。

问题中显示的图像看起来与 Visual Studio 2010 中可用于编码 UI 的数据源向导非常相似。Visual Studio 2012 中未提供该向导,人们必须手动编写连接字符串。 此页面显示用于 Visual Studio 2013 上的编码 UI 的连接字符串。此较早的页面(日期为 2009 年 3 月)具有类似的连接字符串列表,它链接到 此 2005 年页面,其中提供了更多连接字符串。


0
投票

我有一个令人兴奋的消息要告诉你。现在,您可以尝试“[ZetExcel.com]”从头开始创建 Excel 工作表! 问候, 柯克·李

© www.soinside.com 2019 - 2024. All rights reserved.