RT
解决方案 »
- Zebra打印机打印图片的问题
- treeview中只能删除选定的结点吗?
- 【在线等】我在主窗口定义了变量strName,如何在子窗口调用啊
- 如何用日志记录记录软件后台运行的情况并在前台显示出来
- 求教!C#中使用MemoryStream 时出异常OutOfMemoryException
- 怎样逆序输出字符串????
- 程序启动欢迎页面的问题??/
- 关于含框架的页面的跳转问题
- 金山辞霸用的是无边框Form吗?为什么弹出是任务栏上能出现图标?先谢了。。。。分可加
- EXCEL导入时,如何处理科学记录法
- 神奇的“未将对象引用设置到对象的实例。”
- bitmap.save 时发生错误“GDI+中发生一般性错误”
/// <summary>
/// 点击按钮导入数据
/// 作者:lhxhappy
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//打开一个文件选择框
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.hpGridView1);
}Excel数据导入方法 /// <summary>
/// Excel数据导入方法
/// 作者:lhxhappy
/// </summary>
/// <param name="filePath"></param>
/// <param name="dgv"></param>
public void EcxelToDataGridView(string filePath,DataGridView dgv)
{
//根据路径打开一个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;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/www_sw/archive/2009/03/26/4026811.aspx这个我贴出来 ,问下
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);
报错
Provider 有问题
字设置 Excel 特定的属性。“HDR=Yes;”指示第一行中包含列名,而不是数据,“IMEX=1;”通知驱动程
序始终将“互混”数据列作为文本读取
zl, 你的连接字符串有问题,也就你本地没有装8.0的EXcel 库,换个低版本的吧 。
不支持关键字: “provider”。
/// 打开选择所要的Excel文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOpen_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "Excel文件";
ofd.FileName = "";
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
ofd.Filter = "Excel2003文件(*.xls)|*.xls|Excel2007文件(*.xlsx)|*.xlsx|所有文件(*.*)|*.*";
ofd.ValidateNames = true;
ofd.CheckFileExists = true;
ofd.CheckPathExists = true;
string strName = string.Empty;
if (ofd.ShowDialog() == DialogResult.OK)
{
strName = ofd.FileName;
} if (strName == "")
{
SkynetMessage.MsgInfo("没有选择Excel文件!无法进行数据导入");
return;
}
//调用导入数据方法
if (this.cmbRelation.SelectedIndex == 1)
{ EcxelToDataGridView(strName, this.dgvExcel); }
else if (this.cmbRelation.SelectedIndex == 2)
{ EcxelToDataGridView(strName, this.dgvExcel);
}
else if (this.cmbRelation.SelectedIndex == 3)
{ EcxelToDataGridView(strName, this.dgvExcel);
}
}
catch (Exception ex)
{
SkynetMessage.MsgInfo(ex.Message); } }
/// <summary>
/// 导入Excel的方法
/// </summary>
/// <param name="filePath">Excel所存放的路径</param>
/// <param name="dgv">所要存放的DataGridView的名称</param>
/// <param name="excelName">Excel表中SHEET的名字</param>
public void EcxelToDataGridView(string filePath, DataGridView dgv)
{ string strConn = "Provider=Microsoft.JET.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=YES;IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" }); string excel = "select * from [" + schemaTable.Rows[0]["TABLE_NAME"].ToString() + "]";
OleDbDataAdapter dataAdaper = new OleDbDataAdapter(excel, conn);
try
{
dataAdaper.Fill(ds, "[" + schemaTable.Rows[0]["TABLE_NAME"].ToString() + "]");
}
catch (Exception)
{ }
conn.Close();
dgvExcel.DataMember = "[" + schemaTable.Rows[0]["TABLE_NAME"].ToString() + "]";
dgvExcel.DataSource = ds;
}
用我这个 试试 上面的3个IF语句 你不用管, 你只管调方法写你的就行了,我这个不用管EXCEL中的SHEET的名字,什么名字都能打开。需要注意的是 我这个只能打开2003 ,如果要2007或者2010 的 话 你可以把连接字符串修改一下,2007貌似是12.0 你网上搜下吧 我也忘了 楼主给分吧。。
/// <summary>
/// 将DataGridView控件中数据导出到Excel
/// </summary>
/// <param name="gridView">DataGridView对象</param>
/// <param name="isShowExcle">是否显示Excel界面</param>
/// <returns></returns>
public bool ExportDataGridview(DataGridView gridView,bool isShowExcle)
{
if (gridView.Rows.Count == 0)
return false;
//建立Excel对象
Excel.Application excel = new Excel.Application();
excel.Application.Workbooks.Add(true);
excel.Visible = isShowExcle;
//生成字段名称
for (int i = 0; i < gridView.ColumnCount; i++)
{
excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText;
}
//填充数据
for (int i = 0; i < gridView.RowCount-1; i++)
{
for (int j = 0; j < gridView.ColumnCount; j++)
{
if (gridView[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString();
}
}
}
return true;
}
但
dgvExcel.DataMember = "[" + schemaTable.Rows[0]["TABLE_NAME"].ToString() + "]";
报错 无法创建字段 ['11$'] 的子列表。
这个怎么说我的为什么
'Sheet1'不是一个有效名称。请确认它不包含无效的字符和标点,且名称不太张
错误提示:外部表不是预期格式。获取的这个Excel是我用datagridview 导入的,怎么还有这样的错i?
public void EcxelToDataGridView(string filePath, DataGridView dgv)
{ //根据路径打开一个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;
}
在这段代码里