none
关于 EXCEL按一定格式转TXT的方法 RRS feed

  • 问题

  • 原EXCEL表格里共4列标题,如下
    工号,日期,上班,下班
    举例:分别对应
    377,2009-10-10,08:52:50  ----,19:13:00  ---- (这里不能用表格逗号表示单元格)
    注:工号是1-9999的数字,上班下班的时间后面的“ ----”可能是其他字符或者直接是“休息”“旷工”“未刷卡”

    要求导出的txt文件格式如下
    0377,1,2009/10/10,08:52:50
    0377,0,2009/10/10,19:13:00

    也就是说EXCEL表中一行数据要被连续导出2次,第三和第四列的数据分别拿出来做成2行
    其中第一列“工号”的数字不足4位前面补0补满4位,比如EXCEL里是58那TXT里就要导出为0058,
    EXCEL表第二列“日期”里的“-”在TXT里要换成“/”,
    EXCEL表上班和下班时间后面的“  ----”不需要( “  ----”这段字符可能会是其他文字),在TXT里只要导入前面的时间,
    TXT第一个逗号后面“1”表示上班,“0”表示下班,“1”和“0”分别对应EXCEL表中的第三和第四列
    这也就是为什么“上班”和“下班”这两列数据分别要拆开导入成TXT对应的两行的原因。
    在第三和第四列中EXCEL表中如果出现“休息”“旷工”“未刷卡”,那么这段数据不导入TXT
    比如“上班”中有时间,“下班”中出现非时间字符
    那么,TXT中如上第一个逗号后面“0”这行没有
    反之,TXT中如上第一个逗号后面“1”这行没有

    本人外行,懂些皮毛,如下是网上搜集修改过的代码,
        private DataSet myDataSet;
           public static void filecreate(DataSet myDataSet)
            {
                FileStream fs = new FileStream("C:\\abc.txt ", FileMode.Append, FileAccess.Write);
                StreamWriter sw = new StreamWriter(fs);
                foreach (DataRow dr in myDataSet.Tables[0].Rows)
                {


                }
                sw.Flush();
                sw.Close();
                fs.Close();
            }
    这个是C#代码写的,请把foreach里面的实现方法补完,有更好的写法,或者VB代码也行,我这里用的是VS2005和VS2008
    补充:
    上面列出是程序部分代码,其实就缺少foreach里面合适的实现方法
    或者不用foreach,给个其他合适的方法也行。
    这是我的连接代码
            private void GetConnect()
            {
                    string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = c:\\kq.xls;Extended Properties=Excel 8.0";
                    OleDbConnection myConn = new OleDbConnection(strCon);
                    string strCom = " SELECT * FROM [Sheet1$] ";
                    myConn.Open();
                    OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
                    myDataSet = new DataSet();
                    myCommand.Fill(myDataSet, "[Sheet1$]");
                    myConn.Close();
             }
    这是导入TXT代码
            private void bt_strat_Click(object sender, EventArgs e)
            {
                filecreate(myDataSet);
                MessageBox.Show("导出成功,文本存放在C:\\abc.txt ");
            }

    foreach中通过其他写法,经测可导出TXT,上面foreach我是故意留空白的。
    2009年11月13日 8:33

答案

  • 既然你已经从excel拿到数据了,只要利用foreach循环将一行数据变成两行数据并利用StreamWriter.WriteLine写入txt就可以了。

    对于你所说的那些不导入的数据,你用正则表达式做判断,如Regx.IsMatch("input",@"[^\d:]"),表示含有非数字和":"符号的字符,则该行不写入txt。


    Microsoft Online Community Support
    • 已标记为答案 baidubaba 2009年11月17日 4:58
    2009年11月16日 2:53