Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用excel电子表格作为报表查看器c的数据源#_C#_Excel_Visual Studio_Datasource_Reportviewer - Fatal编程技术网

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

C# 使用excel电子表格作为报表查看器c的数据源#,c#,excel,visual-studio,datasource,reportviewer,C#,Excel,Visual Studio,Datasource,Reportviewer,我正在尝试使用Visual Studio(windows窗体应用程序)提供的reportviewer创建基于excel电子表格的报告。然而,我正在努力找到正确的方式来阅读/访问电子表格 当我尝试创建新报告时,会出现以下窗口: 我尝试过使用object选项,但没有任何运气 问题:如何使用excel电子表格创建报告 我很幸运地使用了以下代码来处理该文件,但我找不到将其绑定到reportviewer的方法: Excel.Application ExcelObj = new Excel.Applica

我正在尝试使用Visual Studio(windows窗体应用程序)提供的
reportviewer
创建基于excel电子表格的报告。然而,我正在努力找到正确的方式来阅读/访问电子表格

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

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

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

我很幸运地使用了以下代码来处理该文件,但我找不到将其绑定到reportviewer的方法:

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);
    }
}
Excel.Application ExcelObj=新建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,对);
Excel.Sheets=工作簿.工作表;
Excel.Worksheet工作表=(Excel.Worksheet)工作表。获取项目(1);

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


问题中显示的图像与Visual Studio 2010中可用于编码UI的数据源向导的图像非常相似。Visual Studio 2012中未提供该向导,用户必须手动编写连接字符串。显示了Visual Studio 2013中用于编码UI的连接字符串。(日期为2009年3月)有一个类似的连接字符串列表,它链接到该列表,从而提供多个连接字符串。

您可以查询此问题中提到的数据


但我建议尝试创建一个从excel文件中获取数据的过程,并将其移动到sql server或任何正式数据库。在这个过程中,您可以验证数据格式并消除错误。

在谷歌搜索了很多次之后,我设法将其拼凑起来,并将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工作表是来自外部源,还是您使用应用程序创建的?@DTs需要使用外部源、文件选择器或类似的工具,因此我认为excel workesheet->Report之间的关系是不可能的。您需要确保用excel数据填充数据表,然后使用此数据选项卡因此,您的问题归结为两点:1)从excel填充数据表(这与报表无关),2)将DataTable用作报表数据源。嗨,Ryan,我认为你应该给其中一个可用答案打50分,而不是给你的解决方案打50分。这并不是因为你的代码看起来很好或什么,而是Adrian和我花了时间回答了你的问题。在你的回答中,我认为你不需要数据集,只需要数据表,数据集对象它太重了,你需要验证数据格式。如果你能提供一些代码,而不是一个SO链接,我会更倾向于。也许可以告诉我和任何未来的访问者,我们将如何避免数据集的开销?附言。我实际上无法将它们奖励给我自己