新手一枚求助,怎么把读取到的Excel中的按自己想要的方法拆分?

qq_35195625 2016-06-27 03:52:30
上头叫我做个小工具,但是这里就不会了。
就是怎么把读取到的Excel中的按自己想要的方法拆分?
我已经做到把EXCEL的数据读取到了data grid view1 了,但是知道怎么拆分里面每行的数据。
拆分好之后还要把没用的数据忽略掉,最后插入数据库。
前面上头教我做了怎么分拆一行数据的,但是读取到data grid view1怎么分拆?这个不懂。
private void button1_Click(object sender, EventArgs e)
{
string A = "30231132 0530164155 621700*********7845 建设银行 5980.00 -26.00 5954.00 000001000524 573059 有线销售点终端(P 消费"; //主要是要拆这样的数据
A = textBox1.Text;
A=A.Trim(); //删除头尾部的空格
//A = A.Replace(" ", " "); //将空格换成一个空格,但被换的空格不能多与3个,否则无效
A = Regex.Replace(A.Trim(), "\\s+", " "); //应用正则表达式 把“ ”内多个空格字符换成“ ”一个空格
string[] X = A.Split(' '); //把X定义为‘ ’空格,split()函数可以把指定的特殊字符截成多段
for (int a = 0; a < X.Length;a++ )
{
//MessageBox.Show(X[a]);
listBox1.Items.Add(X[a]);
}
return;
}
上面是要拆分其中的一条数据已经包括方法了
但是把Excel导入到data grid view1 的几十行数据怎么按那个方法拆,最后还要插入到数据库。
下面是我的全部代码:
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.Text.RegularExpressions;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace WindowsFormsApplication41
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataTable dt = new DataTable();
string connString = "server = (local);database = shoucao;user id = zxf;password = zxf123";

SqlConnection conn;

private void Form1_Load(object sender, EventArgs e)
{

}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
string A = "30231132 0530164155 621700*********7845 建设银行 5980.00 -26.00 5954.00 000001000524 573059 有线销售点终端(P 消费"; //主要是要拆这样的数据
A = textBox1.Text;
A=A.Trim(); //删除头尾部的空格
//A = A.Replace(" ", " "); //将空格换成一个空格,但被换的空格不能多与3个,否则无效
A = Regex.Replace(A.Trim(), "\\s+", " "); //应用正则表达式 把“ ”内多个空格字符换成“ ”一个空格
string[] X = A.Split(' '); //把X定义为‘ ’空格,split()函数可以把指定的特殊字符截成多段
for (int a = 0; a < X.Length;a++ )
{
//MessageBox.Show(X[a]);
listBox1.Items.Add(X[a]);
}
return;
}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

private void button3_Click(object sender, EventArgs e)//打开文件操作提示框
{
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK)
{
string fileName = fd.FileName;
bind(fileName);
}
}
private void bind(string fileName)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + fileName + ";" +
"Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'";
OleDbDataAdapter da = new OleDbDataAdapter("select * from [sheet1$]", strConn);
DataSet ds = new DataSet();
try
{
da.Fill(ds);
dt = ds.Tables[0];
this.dataGridView1.DataSource = dt;
}
catch (Exception err)
{
MessageBox.Show("操作失败!" + err.ToString());
}
}
}
}
下面是winform的图片

还有是要拆的EXCEL文件的数据
终端编号 交易日期时间 主账号 发卡行 交易金额 商户费用 结算金额 系统参考号 系统跟踪号 交易渠道 交易类型
30231132 0530164155 621700*********7845 建设银行 5980.00 -26.00 5954.00 000001000524 573059 有线销售点终端(P 消费
30231132 0530165149 621626*********8313 平安银行 0.00 0.00 0.00 000001000529 575973 有线销售点终端(P 余额查询
30231132 0530165400 621467*********6055 建设银行 0.00 0.00 0.00 000001000531 580118 有线销售点终端(P 余额查询
30231132 0530165527 621467*********6055 建设银行 1500.00 -9.45 1490.55 000001000532 584217 有线销售点终端(P 消费
30231132 0530165621 621626*********8313 平安银行 3900.00 -24.57 3875.43 000001000533 579998 有线销售点终端(P 消费
30231133 0530124525 621626*********3740 平安银行 5980.00 -26.00 5954.00 000001000646 421241 有线销售点终端(P 消费
30231133 0530135305 621700*********2133 建设银行 7180.00 -26.00 7154.00 000001000650 453092 有线销售点终端(P 消费
30231133 0530184852 439225******3576 招商银行深圳分行 5980.00 -26.00 5954.00 000001000651 671038 有线销售点终端(P 消费
30231137 0530191934 622575******3107 招商银行 5980.00 -26.00 5954.00 000001000726 691764 有线销售点终端(P 消费
30231137 0530192019 622575******3107 招商银行 5980.00 -26.00 5954.00 000001000727 691394 有线销售点终端(P 消费
30231137 0530192139 622575******3107 招商银行 5980.00 -26.00 5954.00 000001000728 699003 有线销售点终端(P 消费
30231137 0530192233 458123******7401 交通银行 5980.00 -26.00 5954.00 000001000729 697646 有线销售点终端(P 消费
30231138 0530171907 621485******2205 招商银行 5980.00 -26.00 5954.00 000002000796 597384 有线销售点终端(P 消费
30231139 0530154520 356868******2211 平安银行股份有限公司 5980.00 -26.00 5954.00 000002000905 535485 有线销售点终端(P 消费
30231142 0530170931 621700*********8056 建设银行 5980.00 -26.00 5954.00 000012000795 592112 有线销售点终端(P 消费
30231142 0530195234 621226*********9079 工商银行深圳分行 5980.00 -26.00 5954.00 000012000796 021257 有线销售点终端(P 消费
30231143 0530183720 625907******6495 中国银行 7680.00 -26.00 7654.00 000001000520 660916 有线销售点终端(P 消费
30231149 0530144900 439225******8307 招商银行深圳分行 6280.00 -26.00 6254.00 000002000426 488691 有线销售点终端(P 消费
30231149 0530150951 622202*********6769 工商银行深圳分行 5980.00 -26.00 5954.00 000002000427 507936 有线销售点终端(P 消费
30231152 0530094404 622208*********6237 工商银行深圳分行 5980.00 -26.00 5954.00 000003000848 311497 有线销售点终端(P 消费
30231152 0530141301 622848*********2170 农业银行 5980.00 -26.00 5954.00 000003000849 465070 有线销售点终端(P 消费
30231152 0530173003 621700*********4729 建设银行 4880.00 -26.00 4854.00 000003000850 611613 有线销售点终端(P 消费
30231154 0530194032 439226******0071 招商银行深圳分行 5980.00 -26.00 5954.00 000002000596 007593 有线销售点终端(P 消费
30231155 0530111603 622228******1579 浦东发展 1352.00 -8.52 1343.48 000002000767 367556 有线销售点终端(P 消费
30231155 0530181655 622575******2185 招商银行 500.00 -3.15 496.85 000002000768 643788 有线销售点终端(P 消费
30231158 0530111612 622700*********0027 建设银行 5980.00 -26.00 5954.00 000001000134 369918 有线销售点终端(P 消费
30231159 0530102018 622845*********4979 农业银行 5980.00 -26.00 5954.00 000001000517 336656 有线销售点终端(P 消费
30231159 0530111541 628288******6976 工商银行深圳分行 5980.00 -26.00 5954.00 000001000518 368926 有线销售点终端(P 消费
30231159 0530122211 621226*********4861 工商银行深圳分行 950.00 -5.99 944.01 000001000519 403967 有线销售点终端(P 消费
...全文
240 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanta 2016-06-28
  • 打赏
  • 举报
回复
1、单纯接受excel数据可以OleDb,具体可参考:http://www.cnblogs.com/Tsong/archive/2013/02/21/2920941.html 2、单行拆分用 line.Split(new[] { '\t'," " }, StringSplitOptions.RemoveEmptyEntries)
  • 打赏
  • 举报
回复
我刚刚回复了一个编程操作 Excel 进程的问题。 http://bbs.csdn.net/topics/391975896?page=1#post-401293734 注意这是指桌面程序,例如wpf、winform程序中操作 excel。
wanghui0380 2016-06-27
  • 打赏
  • 举报
回复
看你的代码使用的是ado.net读取,出来应该就是一个dt 那么你可以 foreach datarow row in dt.rows { string str=(string)row[0];//简单点写,我就不判定nullvalue了 把你分割的代码放这里,上面的str就是一行值,至于分割的结果你是用list<T> 存,还是怎么样就看你自己选择了(当然你说你想丢一些列,也看你自己怎么选择) }
qq_35195625 2016-06-27
  • 打赏
  • 举报
回复
上头交给我的意思是这样的: 1.实验 做一行数据模拟,就是前面我用以后测试出来把一行的数据都分开了但不是一个表,就在listBox显示一段一段的数据 2.读取excel 我才做到这边。能在dataGridView1显示 3.读取并拆分多行数据。 这里就不会做了完全蒙了 4.把excel的无用数据忽略掉。 5有用的分拆后的数据存到sql。。
qq_35195625 2016-06-27
  • 打赏
  • 举报
回复
导进去就几十几百行怎么分割?
qq_35195625 2016-06-27
  • 打赏
  • 举报
回复
分割单行现在是会的,但是关键领导他要求我要把数据导入到控件当中,但是我是新手这个dataGridView1我都是网上看的。有别的东西能接收excel的数据然后又能用我前面那个按空格分开数据串的么?
巴士上的邂逅 2016-06-27
  • 打赏
  • 举报
回复
加入断点,查看获取的一行的数据是以什么间隔的,看到你贴出类的像是\t,就可以var datas=line.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries),分成多列
龍过鸡年 2016-06-27
  • 打赏
  • 举报
回复
引用 6 楼 qq_35195625 的回复:
就是单个列中,那些数据是别人从别的工具导出来的


我以前帮同事做过一个工具,是把从 sap 里面导出的 wms 导入 excel。
我刚传到我的下载里面,估计要过会儿才能看到。
我试了下,能用。

wanghui0380 2016-06-27
  • 打赏
  • 举报
回复
看了一下不是tab分割,貌似是固定长度分割不足补空格这种,那么你可以使用正则分割他 \s+ string[] splitArray = null; try { splitArray = Regex.Split(subjectString, @"\s+", RegexOptions.Singleline); } catch (ArgumentException ex) { // Syntax error in the regular expression }
qq_35195625 2016-06-27
  • 打赏
  • 举报
回复
当时我拿到EXCEL我就直接导入数据库了,然后发现只有一列的。

后面我直接把EXCEL分列了
这领导说不行,要做过一个工具这样导,不然这么多文件一个一个弄到什么时候。

最终目的就是导入到数据库要弄到上面这样的效果
qq_35195625 2016-06-27
  • 打赏
  • 举报
回复
就是单个列中,那些数据是别人从别的工具导出来的
wanghui0380 2016-06-27
  • 打赏
  • 举报
回复
额,首先想问一下,excel本身数据那些东西是在一个列里面,还是多个列里面 正常情况下,脑子比较清楚滴程序员会是多个列,那么dt读到的也是多列,也就是你根本就无需“拆分”,他本来就是多列 如果脑子比较乱滴可能会提供他认为比较“好”滴一个列,当然这如果没乱到一定程度,他会按csv格式给你,那么你就按csv格式解析,如果乱成一锅粥滴,你就只能先用正则测试工具测试一下规则,后面用正则分析出来 当然看你的dgv本身已经读取到列了,说明对方程序员脑子还很清楚,他本来就是多列,无需你“拆分”,你循环dt的列就可以了
龍过鸡年 2016-06-27
  • 打赏
  • 举报
回复
你的源文件是一个文本文件吧
qq_35195625 2016-06-27
  • 打赏
  • 举报
回复
上面我是做到已经可以导到Winform的dataGridView1显示的,能拆分么?
qq_35195625 2016-06-27
  • 打赏
  • 举报
回复

就是分拆这些数据
qq_35195625 2016-06-27
  • 打赏
  • 举报
回复
顶顶顶,求大大们指点 别沉

110,536

社区成员

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

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

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