公司让写一个数据采集器,忙了3天没什么进展。先有基本代码
麻烦大虾看下,
主要是 dategridview 去绑定EXCEL的数据的时候,怎么都绑定不上。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2 ( )
{
InitializeComponent();
} private void button1_Click ( object sender, EventArgs e )
{
//打开一个文件选择框
try
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "Excel文件";
ofd.FileName = "";
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
//为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。
//该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录
ofd.Filter = "Excel文件(*.xls)|*.xls";
ofd.ValidateNames = true;
//文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
ofd.CheckFileExists = true; //验证路径有效性
ofd.CheckPathExists = true; //验证文件有效性 //名称非空
string strName = string.Empty;
if ( ofd.ShowDialog() == DialogResult.OK )
{
strName = ofd.FileName;
}
if ( strName == "" )
{
MessageBox.Show("没有选择Excel文件!无法进行数据导入");
return;
}
//调用导入数据方法
EcxelToDataGridView(strName, this.dataGridView1);
}
catch ( Exception ex )
{
string message = ex.Message;
MessageBox.Show("message");
}
finally
{ }
}
/// <summary>
/// Excel数据导入方法
/// </summary>
/// <param name="filePath"></param>
/// <param name="dgv"></param>
public void EcxelToDataGridView ( string filePath, DataGridView dgv )
{
//this.dataGridView1.Columns [ 0 ].DataPropertyName;
this.dataGridView1.AutoGenerateColumns = false;
//根据路径打开一个Excel文件并将数据填充到DataSet中
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";
//导入时包含Excel中的第一行数据,并且将数字和字符混合的单元格视为文本进行导入
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel = "select * from [sheet1$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds, "table1"); //根据DataGridView的列构造一个新的DataTable
DataTable tb = new DataTable();
foreach ( DataGridViewColumn dgvc in dgv.Columns )
{
if ( dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell) )
{
DataColumn dc = new DataColumn();
dc.ColumnName = dgvc.DataPropertyName;
//dc.DataType = dgvc.ValueType;
//若需要限制导入时的数据类型则取消注释,前提是DataGridView必须先绑定一
//个数据源那怕是空的DataTable
tb.Columns.Add(dc);
}
} //根据Excel的行逐一对上面构造的DataTable的列进行赋值
foreach ( DataRow excelRow in ds.Tables [ 0 ].Rows )
{
int i = 0;
DataRow dr = tb.NewRow();
foreach ( DataColumn dc in tb.Columns )
{
dr [ dc ] = excelRow [ i ];
i++;
}
tb.Rows.Add(dr);
}
//在DataGridView中显示导入的数据
dgv.DataSource = tb;
} //退出系统
private void button3_Click ( object sender, EventArgs e )
{
Application.Exit();
}
}
}
麻烦大虾看下,
主要是 dategridview 去绑定EXCEL的数据的时候,怎么都绑定不上。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2 ( )
{
InitializeComponent();
} private void button1_Click ( object sender, EventArgs e )
{
//打开一个文件选择框
try
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "Excel文件";
ofd.FileName = "";
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
//为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。
//该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录
ofd.Filter = "Excel文件(*.xls)|*.xls";
ofd.ValidateNames = true;
//文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
ofd.CheckFileExists = true; //验证路径有效性
ofd.CheckPathExists = true; //验证文件有效性 //名称非空
string strName = string.Empty;
if ( ofd.ShowDialog() == DialogResult.OK )
{
strName = ofd.FileName;
}
if ( strName == "" )
{
MessageBox.Show("没有选择Excel文件!无法进行数据导入");
return;
}
//调用导入数据方法
EcxelToDataGridView(strName, this.dataGridView1);
}
catch ( Exception ex )
{
string message = ex.Message;
MessageBox.Show("message");
}
finally
{ }
}
/// <summary>
/// Excel数据导入方法
/// </summary>
/// <param name="filePath"></param>
/// <param name="dgv"></param>
public void EcxelToDataGridView ( string filePath, DataGridView dgv )
{
//this.dataGridView1.Columns [ 0 ].DataPropertyName;
this.dataGridView1.AutoGenerateColumns = false;
//根据路径打开一个Excel文件并将数据填充到DataSet中
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";
//导入时包含Excel中的第一行数据,并且将数字和字符混合的单元格视为文本进行导入
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel = "select * from [sheet1$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds, "table1"); //根据DataGridView的列构造一个新的DataTable
DataTable tb = new DataTable();
foreach ( DataGridViewColumn dgvc in dgv.Columns )
{
if ( dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell) )
{
DataColumn dc = new DataColumn();
dc.ColumnName = dgvc.DataPropertyName;
//dc.DataType = dgvc.ValueType;
//若需要限制导入时的数据类型则取消注释,前提是DataGridView必须先绑定一
//个数据源那怕是空的DataTable
tb.Columns.Add(dc);
}
} //根据Excel的行逐一对上面构造的DataTable的列进行赋值
foreach ( DataRow excelRow in ds.Tables [ 0 ].Rows )
{
int i = 0;
DataRow dr = tb.NewRow();
foreach ( DataColumn dc in tb.Columns )
{
dr [ dc ] = excelRow [ i ];
i++;
}
tb.Rows.Add(dr);
}
//在DataGridView中显示导入的数据
dgv.DataSource = tb;
} //退出系统
private void button3_Click ( object sender, EventArgs e )
{
Application.Exit();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货