使用Excel电子表格作为报表查看器的数据源c#
我试图使用由Visual Studio(windows窗体应用程序)提供的reportviewer
来创建基于Excel电子表格的报表。不过,我正在努力寻找读取/访问电子表格的正确方法。使用Excel电子表格作为报表查看器的数据源c#
当我尝试创建一个新的报告中,我得到了下面的窗口:
我试图使用对象的选择,但还没有任何运气
问题:如何我会使用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表格转换为基本报告。
这需要您设置一个数据集,其中包含在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();
}
我发现这些文章有所帮助:
对于Visual Studio的某些部分,通过选择数据库将电子表格连接为数据源。 ODBC驱动程序允许将多种数据库(包括Excel电子表格文件)用作数据源。
问题中显示的图像与Visual Studio 2010中可用于编码UI的数据源向导非常相似。该向导在Visual Studio 2012中未提供,人们必须手动编写连接字符串。 This page显示用于Visual Studio 2013上的编码UI的连接字符串。This earlier page(日期为2009年3月)具有类似的连接字符串列表,并链接到this 2005 page,该列表提供了多个连接字符串。
您可以在此问题中查询提及的数据。
但我建议尝试创建一个过程,以获得从Excel文件中的数据,并移动到SQL Server或任何正式的数据库。在这个过程中,您可以验证数据格式并消除错误。
并Excel工作表来自外部来源,或者你使用创造了它你的申请 ? –
@DTs需要使用外部来源,文件选择器或类似的东西 – RyanS
好的,所以我认为这种关系Excel工作表 - >报告是不可能的。你需要做的是确保使用excel数据填充DataTable,然后使用这个DataTable作为Report的数据源。因此,您的问题归结为两点:1)从Excel中填充DataTable(这与报告无关),2)使用DataTable作为报告数据源。 –