c#如何读取excel单元格的数据

lucksea521 2010-05-30 05:49:36
如题!
...全文
1049 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
rocket2010 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 lucksea521 的回复:]
string strCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\123.xls;Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"";
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = "s……
[/Quote]

你试试在你那个execl表里面添加多几个数据再测试看看,你会发现第一行数据没的,其他的都在,我也不知道为什么
lucksea521 2010-06-03
  • 打赏
  • 举报
回复
string strCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\123.xls;Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"";
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = "select * from [Sheet1$]";
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn );
DataSet myDataset = new DataSet();
myCommand.Fill(myDataset, "[Sheet1$]");
string adf1 = myDataset.Tables["Sheet1$"].Rows[2][5].ToString();
textBox3.Text = adf1;
myConn.Close();

adf1得不到123.xls中的数据,是什么原因?
xrongzhen 2010-06-02
  • 打赏
  • 举报
回复

//上面代码测试了,是对的

//对比一下你的连接字串,双引号里面可用单引号
xrongzhen 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lucksea521 的回复:]
string table0 = textBox1.Text.Trim();
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + table0 + ";Extended Properties=\"Excel 8.0; HDR = No;IMEX=1\"" ;
OleDbConnection myC……
[/Quote]
怎么不行了?什么地方报错?


//test.xls中有3行3列
using(OleDbConnection cn =new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath +"\\test.xls" + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"))
{
try
{
string strSql="select * from [sheet1$]";
//OleDbCommand cmd = new OleDbCommand(strSql, cn);
OleDbDataAdapter da = new OleDbDataAdapter(strSql, cn);
//DataSet ds = new DataSet();
//da.Fill(ds);
//DataTable dt = ds.Tables[0];

//如果只有一个DataTable 可用下面的
DataTable dt = new DataTable();
da.Fill(dt);
string strTest = dt.Rows[1][1].ToString();

}
catch(Exception ex)
{

}

}
lucksea521 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xrongzhen 的回复:]
引用 10 楼 lucksea521 的回复:
string table0 = textBox1.Text.Trim();
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + table0 + ";Extended Properties=\"Excel 8.0; HDR = No;IMEX=1\"" ;……
[/Quote]

用您的方法,提示 DataTable 引用错误
askerasker 2010-06-02
  • 打赏
  • 举报
回复
接分,学习了,谢谢大家
shuaiqihuazi 2010-06-02
  • 打赏
  • 举报
回复
你参照一下这个吧 希望有用 myPro定义的都是参数
private void fnLoadExcelSheet()
{
this.lvExcel.Items.Clear();
try
{
Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook myWorkbook;
Microsoft.Office.Interop.Excel.Worksheet myWorksheet;
Microsoft.Office.Interop.Excel.Range myRange;
ListViewItem myItem;
myExcel.DisplayAlerts = false;
myWorkbook = myExcel.Workbooks.Open(myPro.ExcelFile, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing);
if (myPro.GetSheetIndex(myPro.ExcelFile, myPro.Sheet) != -1)
{
myWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)(myWorkbook.Worksheets[myPro.SheetIndex]);
myWorksheet.Columns.AutoFit();
for (int i = 1; i <= myWorksheet.Cells.CurrentRegion.Columns.Count; i++)
{
myRange = (Microsoft.Office.Interop.Excel.Range)(myWorksheet.Columns[i, Type.Missing]);
string szColumnName = GetColumnName(myRange.get_Address(Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing));
myItem = this.lvExcel.Items.Add(szColumnName);
if (myPro.HeadLine > 0)
{
string szHead = szColumnName + myPro.HeadLine.ToString();
myRange = (Microsoft.Office.Interop.Excel.Range)(myWorksheet.get_Range(szHead, Type.Missing));
szHead = myRange.Text.ToString();
myItem.SubItems.Add(szHead);
string szContent = szColumnName + ((int)(myPro.HeadLine + 1)).ToString();
myRange = (Microsoft.Office.Interop.Excel.Range)(myWorksheet.get_Range(szContent, Type.Missing));
szContent = myRange.Text.ToString();
myItem.SubItems.Add(szContent);
}
else
{
myItem.SubItems.Add("");
myItem.SubItems.Add("");
}
}
}
myWorkbook.Close(false, Type.Missing, Type.Missing);
myExcel.Workbooks.Close();
myExcel.DisplayAlerts = true;
myExcel.Quit();
}
catch (Exception e)
{
MessageBox.Show(e.Message, "TranExcelToSql", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
return;
}
xrongzhen 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lucksea521 的回复:]
引用 12 楼 xrongzhen 的回复:
引用 10 楼 lucksea521 的回复:
string table0 = textBox1.Text.Trim();
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + table0 + ";Extended Properties=\"Excel 8……

用您的方法,提示 DataTable 引用错误
[/Quote]
引用错误的话,那应该是没添加命名空间。如果加上using System.Data;还不行的话,那就右键“添加引用”System.Data.dll
xrongzhen 2010-06-02
  • 打赏
  • 举报
回复
如果是编译错误的话,那看看命名空间using System.Data;有没有加上

如果不是的话,那就看以下哪里出错了?
1、看你的table0 路径是不是正确
2、看"select * from [sheet1$]"中名是不是sheet1
3、看数据xls文件是否为空
lucksea521 2010-06-01
  • 打赏
  • 举报
回复
string table0 = textBox1.Text.Trim();
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + table0 + ";Extended Properties=\"Excel 8.0; HDR = No;IMEX=1\"" ;
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = " SELECT * FROM [sheet1$] ";
myConn.Open();
//打开数据链接,得到一个数据集
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
//创建一个 DataSet对象
//myDataSet = new DataSet();
DataSet myDataSet = new DataSet();
//得到自己的DataSet对象
myCommand.Fill(myDataSet, "[sheet1$]");
//数据绑定
string adf1=myDataSet .Tables ["招生信息$"].Rows[2][5].ToString();


这样是不是不行?
lucksea521 2010-06-01
  • 打赏
  • 举报
回复
string table0 = textBox1.Text.Trim();
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + table0 + ";Extended Properties=\"Excel 8.0; HDR = No;IMEX=1\"" ;
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = " SELECT * FROM [sheet1$] ";
myConn.Open();
//打开数据链接,得到一个数据集
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
//创建一个 DataSet对象
//myDataSet = new DataSet();
DataSet myDataSet = new DataSet();
//得到自己的DataSet对象
myCommand.Fill(myDataSet, "[sheet1$]");
//数据绑定
string adf1=myDataSet .Tables ["sheet1$"].Rows[2][5].ToString();
//读出第3行第6列数据


这样不可以!

这样是不是不行?
  • 打赏
  • 举报
回复
基本的方法主要有两个:一个是用oledb去连excel,就是楼上说的把excel当作数据库,个人感觉插入数据比较麻烦,另一个就是用com组件去操作,操作比较方便,但是权限设置,释放excel资源比较麻烦
wangjunloverq 2010-05-30
  • 打赏
  • 举报
回复
把EXCEL当座数据库,直接用SQL查找
皇城龙三 2010-05-30
  • 打赏
  • 举报
回复
C#操作Excel简单方法:

添加引用:Microsoft Excel 11.0 Object Library ;
添加:using Microsoft.Office.Interop.Excel;

★打开Excel文件============================
  Microsoft.Office.Interop.Excel.Application excel1 = new Microsoft.Office.Interop.Excel.Application();
Workbook workbook1 = excel1.Workbooks.Open(@"E:\aaa.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
excel1.Visible = true;


★新建Excel对象============================


   Microsoft.Office.Interop.Excel.Application excel1 = new Microsoft.Office.Interop.Excel.Application();
Workbook workbook1 = excel1.Workbooks.Add(XlWBATemplate.xlWBATWorksheet或true);
worksheet1.Activate();//激活sheet1表
excel1.Visible = true;


★新建Excel表============================


  Microsoft.Office.Interop.Excel.Application excel1 = new Microsoft.Office.Interop.Excel.Application();
Workbook workbook1 = excel1.Workbooks.Add(true);
Worksheet worksheet1 = (Worksheet)workbook1.Worksheets["sheet1"];
Worksheet worksheet1 =(Worksheet)workbook1.Worksheets.Add(Type.Missing,workbook1.Worksheets[1], 1, Type.Missing);
excel1.Visible = true;



★保存Excel==============================


         Microsoft.Office.Interop.Excel.Application excel1 = new Microsoft.Office.Interop.Excel.Application();
Workbook workbook1 = excel1.Workbooks.Add(true);
Worksheet worksheet1 = (Worksheet)workbook1.Worksheets["sheet1"];
worksheet1 = (Worksheet)workbook1.Worksheets.Add(Type.Missing, workbook1.Worksheets[1], 1, Type.Missing);
worksheet1.Activate();
worksheet1.Cells[2, 2] = 3455555;
excel1.Visible = true;
excel1.DisplayAlerts = false;//不显示提示框
workbook1.Close(true, "d:\\1.xls", null);
//关闭

worksheet1 = null;
workbook1 = null;
excel1.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel1);
excel1 = null;
System.GC.Collect();

皇城龙三 2010-05-30
  • 打赏
  • 举报
回复
qygcom 2010-05-30
  • 打赏
  • 举报
回复
1.从网上找Interop.Excel.dll这个动态库,添加引用到你的项目.

2.认真看下这两个方法,看懂了直接调用方法即可。
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Data;
using Excel;
using System.Text;
using System.Collections;


namespace OperateExcel
{
public class OperateExcel
{
public string[] ArrayToStringArray(Array array)
{
string[] ary = new string[array.Length];
for (int i = 1; i <= array.Length; i++)
{
if (array.GetValue(1, i) == null)
ary[i - 1] = "";
else
ary[i - 1] = (string)(array.GetValue(1, i)).ToString();
}
return ary;
}


/// <summary>
/// 把Excel里的数据倒入到数据库里。
/// </summary>
/// <param name="fullFileNameOfExecl">完整的Excel文件名</param>
/// <param name="colNum">总列数</param>
/// <param name="contentStartOfRow">Excel里正式内容是从第几行开始的</param>
/// <param name="excelMaxColumnName">Excel里列头最后的名字,例如最后列是“AB”或“AZ”</param>
/// <param name="primaryKeyOfExecl">Excel里如有数据,有些字段可空,但这个列对应数据库里的主关键字,必须有,它所在第几列</param>
/// <returns></returns>
public System.Data.DataTable ImportExeclToDB(string fullFileNameOfExecl, int colNum, int contentStartOfRow,
string excelMaxColumnName, int primaryKeyOfExecl)
{
System.Data.DataTable dt = new System.Data.DataTable();
try
{
Excel.Application excelApp = new Excel.Application();
excelApp.Visible = false;
if (fullFileNameOfExecl != "")
{
try
{
Excel.Workbook workbook = excelApp.Workbooks.Open(fullFileNameOfExecl, 0, true, 5, "", "",
true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, 0, 0, true);
Excel.Sheets sheets = workbook.Worksheets;
object missing = System.Reflection.Missing.Value;
string A = "";
for (int i = 0; i < colNum; i++)
{
if ((65 + i) < 91)
A = ((char)(65 + i)).ToString();
else
A = "A" + ((char)(i + 39)).ToString();
dt.Columns.Add(A, Type.GetType("System.String"));
}
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
for (int i = contentStartOfRow; i < 65536; i++)
{
Excel.Range range = worksheet.get_Range("A" + i.ToString(), excelMaxColumnName
+ i.ToString());
System.Array array = range.Cells.Value2 as System.Array;
if (array.GetValue(1, primaryKeyOfExecl) == null)
break;
string[] ary = ArrayToStringArray(array);
DataRow dr = dt.NewRow();
for (int j = 0; j < array.Length; j++)
dr[j] = ary[j];
dt.Rows.Add(dr);
}
}
catch (Exception e)
{
MessageBox.Show("Excel读取错误,或数据格式不对,或数据库不能连接:" + e.ToString());
}
}
excelApp.Quit();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
return dt;
}
}
}
wuyq11 2010-05-30
  • 打赏
  • 举报
回复
Excel.Range ran=(Excel.Range)mSheet.Cells[i,j];
if(ran.Value2==null)
{}
yuan0716 2010-05-30
  • 打赏
  • 举报
回复
我也想知道。顶个
Excel使用过程中,运用一些技巧会使得我们的工作效率提高很多。而这些技巧往往又被忽略或忘记怎么去使用。本套课程基于此整理了一些Excel方面的技巧,这些呢为学习笔记集锦,前后章内容不存在连贯性,仅整理一些常用的技巧与大家分享。【说明:Excel为2013版本,无下载资料,请参看课程视频学习。】l  本课程知识点l  第1节:概述l  第2节:Excel大批量数据自动填写灵活妙用经验分享l  第3节:巧为Excel2013单元格的文本内容增加拼音l  第4节:Excel单元格内实现自动换行l  第5节:Excel快速使用函数计算不同区域数据l  第6节:Excel单元格超长内容不能显示全巧妙设置l  第7节:巧妙运用之Excel单元格中自动快速输入带有小数点的数值l  第8节:Excel巧妙使用回车键快速粘贴l  第9节:职场必会Excel函数经典应用,使用And函数多条件判断l  第10节:Excel函数经典应用之IF函数条件判断范例l  第11节:Excel技巧之巧妙使用不同颜色区分不同类型数据l  第12节:巧妙快速调整Excle所有单元格或局部单元格l  第13节:巧妙快速切换Excel单元格回车后的纵向输入和横向输入l  第14节:巧妙理解记忆Excel公式中的相对引用和绝对引用l  第15节:Excel单元格文风快速两端对齐l  第16节:Excel2013文档内容快速居中打印l  第17节:excel直接使用模板制作精美格式样式l  第18节: excel使用中可以直接使用翻译功能中英文互译l  第19节:不需要截图工具直接使用excel复制图片l  第20节:excel粘贴也可以多种方式选择了l  第21节:巧为excel单元格画双划线l  第22节:为excel的文字或数字添加单划线或双划线l  第23节:excel连续微调单元格内容字号的大小l  第24节: 快速的将长文本内容变为自适应多行文本l  第25节:excel单元格合并居中l  第26节:单元格内容连续微调缩进量l  第27节:将文本内容倾斜到任意角度l  第28节:单元格内容多种形式的对齐方式l  第29节:快速将数据转换为会计专用数据l  第30节:快速为数据增加或减少小数位数

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧