原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我是故意留空白的。