如何用ADO.NET实现txt与Excel的互相转换
本篇文章为大家展示了如何用ADO.NET实现txt与Excel的互相转换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
成都创新互联主营唐县网站建设的网络公司,主营网站建设方案,成都app开发,唐县h5微信小程序开发搭建,唐县网站营销推广欢迎唐县等地区企业咨询
在园子里看过很多文章,关于设计模式,关于架构等等,我在这里谈谈一些软件的功能,为什么需要这样的功能。
我前段时间写了一个TXT与EXCEL为什么要互相转换的功能,可能有人会问,这样的功能有什么作用?是的,这小功能在软件开发上有很大的作用的。txt文本是没有格式的,但是excel文档是有格式的,将没有格式的东西转换为有格式的东西,可以方便别人阅读,除此之外,很多软件的服务端传给客户端的东西是没有格式的东西,就是一个字符串,客户端接收到这个字符串,如何格式化,变成我们需要的东西,比如说excel文档。反之,有个excel文档,也要将它变成字符串才能顺利地发给服务端,或者发给调用者。当然,可能有人会说传字符串的方式非常落后,现在都有webservice这个标准化的东西,webservice是有格式的,而且很好传输与解析,但是如果你后台是用C语言写,或者是更低级语言编写的,并没有类似于webservice的东西,那就只能传输字符流了。其实webservice传输的也是wsdl的文本,它本身也是一堆字符而已,只不过是通过一些组件变成我们需要的东西,例如类。webservice只是一个通用的标准,也可以制定属于自己的标准。
EXECL转换TXT:
首先,需要读取EXCEL文档,读取excel文档可以通过ADO.NET的Connection。
////// 获取excel /// /// ///privateOleDbConnection getCon(stringexcelPath){try{stringstrConn = "Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+ excelPath + ";"+ "Extended Properties=Excel 8.0;"; OleDbConnection conn = newOleDbConnection(strConn);conn.Open();returnconn;}catch(Exception ex){thrownewArgumentException("打开excel失败", ex.Message);}}
然后,需要读取excel文档的每一页,与读取excel的内容
////// 获取excel页 /// /// ///publicstring[] getSheets(stringexcelPath){OleDbConnection conn = getCon(excelPath);try{DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, newobject[] { null, null, null, "Table"}); string[] strTableNames = newstring[dtSheetName.Rows.Count]; inti = 0;for(intk = 0; k /// 获取excel的数据 /// /// /// /// publicDataTable GetExcelDB(stringexcelPath,stringsheetName){OleDbConnection conn = getCon(excelPath);try{DataTable dt = newDataTable();OleDbDataAdapter myada = null;stringstrExcel = "select * from ["+ sheetName + "]";myada = newOleDbDataAdapter(strExcel, conn);myada.Fill(dt);returndt;}catch(Exception ex){ throwex; }finally{ conn.Close(); }}
***,生成TXT文本,因为txt文本是没有格式的,因此我们需要制定一些标准,我设定每个单元格的长度都为30个字节,excel的每一行对应txt的一行。如果单元格的长度是不一样的,可以制定一个list。有了标准,这样在txt转excel是才能成功。这里需要注意一点,中文字符与英文字符的节长度是不一样的,中文占两个字节,而英文是占1个字节,因此在转换的时候需要多做一些工作。
////// 生成txt /// /// /// privatevoidbtnGenerate_Click(objectsender, EventArgs e){if(txtExcelPath.Text.Trim() == ""){MessageBox.Show("请导入excel");return;}if(cboSheet.Text.Trim() == ""){MessageBox.Show("没有存在的excel页"); return;}stringcolName = "";stringrowText = ""; StringBuilder strbui = newStringBuilder(); try{DataTable dt = GetExcelData.ExcelObj.GetExcelDB(txtExcelPath.Text.Trim(), cboSheet.Text.Trim()); for(inti = 0; i
TXT转换EXECL:在txt转换excel的过程中,首先需要获取txt文本
////// /// StreamReader reader = null; ////// /// Encoding myEncoding = Encoding.GetEncoding("GB2312"); ////// 导入txt/// /// /// privatevoidbtnImportTxt_Click(objectsender, EventArgs e){ OpenFileDialog openFileDialog = newOpenFileDialog(); openFileDialog.InitialDirectory = "D:\"; openFileDialog.Filter = "TXT文件|*.txt"; openFileDialog.RestoreDirectory = true;openFileDialog.FilterIndex = 1; if (openFileDialog.ShowDialog() == DialogResult.OK){string fName = openFileDialog.FileName;textBox2.Text = fName;reader = new StreamReader(fName, System.Text.Encoding.GetEncoding("GB2312")); }}
然后对文本进行处理,用 reader.ReadLine()一行行地往下读,每读一行处理一行,直到读完为止。处理的时候需要把字符串均等平分,每30个字节写一个单元格。
////// 把字符串均等平分/// /// ///privatestring[] spitText(stringSourceString){intlength = 30; intlen = 0;byte[] SourceStr_Bytes = myEncoding.GetBytes(SourceString); byte[] CutStr_Bytes1 = newbyte[length]; if(SourceStr_Bytes.Length % length != 0)len = SourceStr_Bytes.Length / length + 1; elselen = SourceStr_Bytes.Length / length;string[] array = newstring[len];inti, j = 0; for(i = 0; (i + length) <= SourceStr_Bytes.Length &&SourceStr_Bytes.Length >= i; ){ Array.Copy(SourceStr_Bytes, i, CutStr_Bytes1, 0, length);array[j] = myEncoding.GetString(CutStr_Bytes1);j++;ii = i + length;} if(SourceStr_Bytes.Length % length != 0){Array.Copy(SourceStr_Bytes, SourceStr_Bytes.Length - i, CutStr_Bytes1, 0, length);array[j] = myEncoding.GetString(CutStr_Bytes1);}returnarray;} /// /// 生成txt /// /// /// privatevoidbtnGenTxt_Click(objectsender, EventArgs e){SaveFileDialog saveFileDialog = newSaveFileDialog();saveFileDialog.Filter = "文本文件|*.xls";if(saveFileDialog.ShowDialog() == DialogResult.OK){StreamWriter sw = newStreamWriter(saveFileDialog.FileName, true, System.Text.Encoding.GetEncoding("GB2312"));stringstr = ""; if(reader == null){MessageBox.Show("请导入txt");return;}try{ //写标题stringheadText = reader.ReadLine(); string[] array = spitText(headText); for(inti = 0; i好了,到这里,TXT月EXCEL的互相转换功能就做好了,源码没找到地方上传,改天找个好的网盘上传。
上述内容就是如何用ADO.NET实现txt与Excel的互相转换,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。
当前标题:如何用ADO.NET实现txt与Excel的互相转换
新闻来源:http://scyanting.com/article/jscjhg.html