问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何把Winform 和 Excel 连接到一起 。

发布网友 发布时间:2022-04-19 19:30

我来回答

2个回答

热心网友 时间:2023-09-06 02:15

这两天做东西,用到了Excel。需要将Excel中的数据读取到内存中,经过处理后,保存到数据库中。也可以让某列的值显示到制定控件上。。

1.引用Microsoft.Office.Interop.Excel

2.代码:
/// <summary>
/// 导入Excel文件,并显示在列表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnImport_Click(object sender, EventArgs e)
{
string worksheetname = string.Empty;
importtpye = cmbTicketType.Text;
supplier = cmbSupplier.SelectedValue.ToString();

#region 导入本地Excel文件

//导入本地文件
OpenFileDialog file = new OpenFileDialog();
file.Filter = "文档(*.xls)|*.xls";
if (file.ShowDialog() == DialogResult.OK)
btnImport.Tag = file.FileName;
//判断有没有文件导入
if (file.FileName.Length == 0)
{
MessageBox.Show("请选择要导入的文件", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}

#endregion

#region 获取Excel的工作表名称
//创建Excel实例,获取worksheet Name
Microsoft.Office.Interop.Excel.Application oExcel = new Microsoft.Office.Interop.Excel.Application();
object objMissing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Workbook myBook = (Microsoft.Office.Interop.Excel.Workbook)oExcel.Workbooks.Open(file.FileName, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing);
Microsoft.Office.Interop.Excel.Sheets sheets = myBook.Worksheets;
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)sheets.get_Item(1);
worksheetname = worksheet.Name;//获取worksheet Name
oExcel.Quit();
#endregion

dataTable.Rows.Clear();
//将Excel表中的数据导入到Datatable中
DataTable table = LoadExcelToDataTable(file.FileName, worksheetname);

}

3.代码:
/// <summary>
/// 加载Excel表到DataTable,跟原始Excel表形式一样,需要筛选自己有用的数据
/// </summary>
/// <param name="filename">需要读取的Excel文件路径</param>
/// <param name="sheetname">工作表名称</param>
/// <returns>DataTable</returns>
public static DataTable LoadExcelToDataTable(string filename, string worksheetname)
{
DataTable table;
//连接字符串
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
OleDbConnection myConn = new OleDbConnection(sConnectionString);
string strCom = " SELECT * FROM [" + worksheetname + "$]";
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
table = new DataTable();
myCommand.Fill(table);
myConn.Close();
return table;
}

4.注意:有的人的连接字符串写成这样:
//连接字符串
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" +filename + ";" + "Extended Properties=Excel 8.0;";
这样也可以读取到数据,但是,如果Excel表里的某一列中既有文本类型的值,又有数字类型的值,即混合类型的列,那么就会只读取到一种类型的值,另一种类型的就会为NULL。

//连接字符串
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";

这样,后边加上"HDR=Yse;IMEX=1",并且这句必须用引号引住,这样就会把混合类型的数据同一当作文本读取,不会出现丢数据的现象。

二、方法二
/// <summary>
/// ExcelUtils 的摘要说明
/// </summary>
public class ExcelUtils
{

public static DataSet ReadExcelToDS(string Path)
{
try
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
if (schemaTable != null)
{
string sheetName = schemaTable.Rows[0][2].ToString().Trim();
//第一张sheet的名称,这个索引为什么是[0][2]也是尝试出来的

if (sheetName != null && sheetName.Length > 0)
{
string strExcel = "select * from [" + sheetName + "]";
OleDbDataAdapter myAdp = new OleDbDataAdapter(strExcel, conn);
DataSet ds = new DataSet();
myAdp.Fill(ds);
return ds;
}

}
return null;
}
catch (Exception e)
{
throw new WebAppException(e.Message) ;
}
}

}

热心网友 时间:2023-09-06 02:15

http://zhidao.baidu.com/question/106536746.html?fr=qrl&cid=1069&index=1&fr2=query
看看这个有帮助吗?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抖音弹幕怎么关掉?怎么关闭抖音弹幕? 惠普LaserJet P3005D是否支持B5纸的双面打印? word打印出图片总是缺一部分怎么办-word打印图片不完整怎么解决_百度... 理想one哪里产的车辆? 抚州抚州ONE在哪里? one地址在哪里? 如何在图片上写字(如何在图片上添加文字) 网商贷为什么钱没到账 高级经济师职称怎么评 高级经济师需要评审吗 c# winform程序,类似于这样的表格是怎么做出啦的... winform如何画表格? winform中怎么用入excel表格功通知 C# winform 想做个如图所示的表格,用什么控件来做... C# WinForm窗体中,嵌入类似于Excel表格 哪位大神知道winform有没有可以支持合并单元格的表... winform怎么实现表格效果? C# winform 表格 C#winform怎么绘制表格 winForm中表格拉伸关闭控制 C# winform中以excel的方式编辑表格 行车记录仪在停车状态下,能24小时监控吗?蓄电池... 雅迪电动车怎么看电量? 哈罗单车的停车区域怎么查询 享骑电单车停点还车区域如何查看及选择? 怎么判断电瓶在停车是还在放电? 我弟弟今年8月8号下午在不知情的情况下把电动车停... 红绿灯路口的监控能看到车里的人吗 北京电子停车怎么缴费 别人的车险电子保单平安好车主上能不能查看到? WinForm控件大全,要详细的. winform中有表格吗?如果用datagridview的话,怎样... winform中用chart控件做一个用于房间温度监控的图... C# winform 的listView控件如何将单元格写入值 winform是否可以根据数据表的列项自动生成一个可编... C#请问winform怎么做出复杂表格的界面 DX控件,winform中chartcontrol如何和数据库中的表... pr可以加特效么? 华为手机下拉菜单设置? 视频在pr剪辑完了,可以在ae上加特效么? 华为手机如何设置下拉菜单栏 如何在excel 表格里添加word文档 华为nova7下拉状态栏快捷键怎么调 手机添加微信的步骤 如何在excel中添加word链接 如何在excel里加入word文档 怎么添加微信? excel中怎么插入Word? 有对方怎么加微信 在excel中怎么插入一个word文件