当前位置:编程学习 > C#/ASP.NET >>

C#读取同一文件夹下多个txt文件中的特定内容,并写进excel

现在有文件夹里有多个txt文件,每个txt文件中的格式差不多如下:
Money of Xiaohong(this year)             12
Money of Xiaoma(Last year)               13
Money of Xiaoqiang(this year)            16
Money of Xiaogang(Last year)             14

当然txt中还包括其它一些杂乱内容,其中需要取出的内容就是上面这部分东东,并写进excel中,写入excel时,将前面的这部分放在excel的第一列,后面的数值放在excel的第二列,假如第一列叫标题,第二列叫值,在excel中需要把各个txt读到相同标题的后面的值相加,读了多个txt后输出如下效果:


本人C#只有少量基础,麻烦贴点代码,感激中

C# Excel --------------------编程问答-------------------- 这不是来请教问题的,整个就是来找免费苦力的。 --------------------编程问答-------------------- 呵呵,不好意思,我把目前自己能做的先贴出来:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;

namespace change
{
    public partial class txtTOexcel : Form
    {
        static FileInfo[] files;
        static DirectoryInfo folder;
        static String Url;

        public txtTOexcel()
        {
            InitializeComponent();
            textBox.Text = @"F:\C#\test";
        }

        private void button5_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                textBox.Text = fbd.SelectedPath;
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Excel.ApplicationClass MyExcel = new Excel.ApplicationClass();
            MyExcel.Visible = true;
            if (MyExcel == null)
            {
                MessageBox.Show("EXCEL无法启动!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            Excel.Workbooks MyWorkBooks = MyExcel.Workbooks;
            Excel.Workbook MyWorkBook = MyWorkBooks.Add(Missing.Value);
            Excel.Worksheet MyWorkSheet = (Excel.Worksheet)MyWorkBook.Worksheets[1];
            Excel.Range MyRange = MyWorkSheet.get_Range("A1", "C1");
            MyRange = MyWorkSheet.get_Range("A1", Missing.Value);
            object[,] mydata = new Object[35000,4];
            MyRange = MyRange.get_Resize(5 * 7000, 4);

            //Url = @"F:\C#\";
            
            Url=textBox.Text+"\\";  //路径
            folder = new DirectoryInfo(Url);
            files = folder.GetFiles();

            SortedList sl = new SortedList();
            foreach (FileInfo thisFile in files)
            {
                sl.Add(thisFile.Name, thisFile.Name);
            }

            int j = 0;
            foreach (DictionaryEntry Item in sl)
            {
                string path = Url + Item.Value.ToString();
                
                try
                {

                    if (File.Exists(path) == true)
                    {
                        string conten1,conten2,conten3,conten4,conten5,conten6,conten7;

                        StreamReader sr = new StreamReader(path, UnicodeEncoding.GetEncoding("gb2312"));

                        StringBuilder sb = new StringBuilder();
                   

                        conten1 = sr.ReadLine().Trim();
                        conten2 = sr.ReadLine().Trim();
                        conten3 = sr.ReadLine().Trim();
                        conten4 = sr.ReadLine().Trim();
                        conten5 = sr.ReadLine().Trim();
                        conten6 = sr.ReadLine().Trim();
                        conten7 = sr.ReadLine().Trim();

                        //需要对conten的数据进行分割,分割出标题和值
                        


                        mydata[j, 0] = conten1;
                        mydata[j + 1, 0] = conten2;
                        mydata[j + 2, 0] = conten3;
                        mydata[j + 3, 0] = conten4;
                        mydata[j + 4, 0] = conten5;
                        mydata[j + 5, 0] = conten6;
                        mydata[j + 6, 0] = conten7;

                        
                        j = j + 7;//conten有几个j就加几,保证所有行显示出来

                        sr.Close();
                    }
                }
                catch
                {
                }
                
            }
            MyRange.Value2 = mydata;
            MyRange.EntireColumn.AutoFit();


        }

    }
}
--------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
这不是来请教问题的,整个就是来找免费苦力的。

目前的代码贴出来了,可以在文件夹中读取到各个txt内容,不过内容太多时MyRange.Value2 = mydata;会报错, 另外,conten 读到的内容是 Money of Xiaohong(this year)             12;不知怎样拆分开放进excel的两个格子中 --------------------编程问答-------------------- 报什么错。你说是因为“内容太多时”报错,真的是这样么?

第2个问题很简单嘛
MyRange = MyWorkSheet.get_Range("B1", Missing.Value);
这样就写入第2列了。
--------------------编程问答--------------------
引用 4 楼 caozhy 的回复:
报什么错。你说是因为“内容太多时”报错,真的是这样么?

第2个问题很简单嘛
MyRange = MyWorkSheet.get_Range("B1", Missing.Value);
这样就写入第2列了。

这种报错,txt的内容只读出了3行到excel,第四行是“==============”字符,不知是不是这个原因 --------------------编程问答--------------------
引用 5 楼 botao258 的回复:
Quote: 引用 4 楼 caozhy 的回复:

报什么错。你说是因为“内容太多时”报错,真的是这样么?

第2个问题很简单嘛
MyRange = MyWorkSheet.get_Range("B1", Missing.Value);
这样就写入第2列了。

这种报错,txt的内容只读出了3行到excel,第四行是“==============”字符,不知是不是这个原因

单元格你设置的格式是数字还是文本?如果是数字,那么你设置====肯定是不行的。

在单元格格式里面设置下。 --------------------编程问答--------------------
引用 6 楼 caozhy 的回复:
Quote: 引用 5 楼 botao258 的回复:

Quote: 引用 4 楼 caozhy 的回复:

报什么错。你说是因为“内容太多时”报错,真的是这样么?

第2个问题很简单嘛
MyRange = MyWorkSheet.get_Range("B1", Missing.Value);
这样就写入第2列了。

这种报错,txt的内容只读出了3行到excel,第四行是“==============”字符,不知是不是这个原因

单元格你设置的格式是数字还是文本?如果是数字,那么你设置====肯定是不行的。

在单元格格式里面设置下。

好的,谢谢版主;另外上面说的第二个问题,写入第二列是可以,不过conten中是"Money of Xiaohong(this year)             12"这样的字符串,想把“Money of Xiaohong(this year)”放进A1,对应的“12”放进B1,这该怎么办? --------------------编程问答-------------------- MyRange = MyWorkSheet.get_Range("A1", Missing.Value);
写入第一列
MyRange = MyWorkSheet.get_Range("B1", Missing.Value);
写入第二列 --------------------编程问答--------------------
引用 8 楼 caozhy 的回复:
MyRange = MyWorkSheet.get_Range("A1", Missing.Value);
写入第一列
MyRange = MyWorkSheet.get_Range("B1", Missing.Value);
写入第二列

谢谢版大,不过我读取txt的时候是按行读的,读出后存放在conten中,想实现的就是:将conten中的标题和值分割,标题写入第一列,值写入第二列 --------------------编程问答-------------------- 找到了如下方法:
string[] a = System.Text.RegularExpressions.Regex.Split(conten1, "    ");
ArrayList list = new ArrayList();
  for (int i = 0; i < buf1.Length; i++)
      {
         list.Add(a[i]);
         textBox2.Text = a[1].Trim();
      }
分割后a[0]是标题,a[1]是值,可是为何又不能写入到excel中了,郁闷啦 --------------------编程问答--------------------
引用 10 楼 botao258 的回复:
找到了如下方法:
string[] a = System.Text.RegularExpressions.Regex.Split(conten1, "    ");
ArrayList list = new ArrayList();
  for (int i = 0; i < buf1.Length; i++)
      {
         list.Add(a[i]);
         textBox2.Text = a[1].Trim();
      }
分割后a[0]是标题,a[1]是值,可是为何又不能写入到excel中了,郁闷啦

值在textBox2中就可以显示出来,就是excel里一片空白 --------------------编程问答-------------------- Refer this:


http://www.cnblogs.com/insus/p/3256482.html
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,