有个小工作需要,把VFP中的数据导出到Excel中。
VFP自带的导出到Html中,再使用Excel打开,当数据量小的时候没有问题,数据量一大,就出现错误,终止导出操作。
如果没有Memo字段,可以使用WinHex直接修改dbf中的值,就可以直接使用Excel打开了,但是我需要Memo字段。
我没有找到什么好的方法,有的话,不妨留言给我,谢谢!
最终写了个简单的程序,
1
protected void Page_Load(object sender, EventArgs e)
2
{
3
System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection();
4
string table = @"C:\test\aa.DBF";
5
string connStr=@"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO";
6
7
conn.ConnectionString = connStr;
8
conn.Open();
9
string sql = "";
10
sql = @"select * from " + table + " order by dpid ";
11
OdbcDataAdapter da = new OdbcDataAdapter(sql,conn);
12
DataTable dt = new DataTable("chkdkp");
13
da.Fill(dt);
14
conn.Close();
15
16
//dt.WriteXml(@"c:\aa.xml");
17
18
int rowCount = dt.Rows.Count; //DataTable行数
19
int colCount = dt.Columns.Count; //DataTable列数
20
21
string filename=@"c:\testfile.csv";
22
//打开文件并显示其内容
23
24
FileStream fs = new FileStream(filename,FileMode.OpenOrCreate,FileAccess.Write);
25
StreamWriter m_streamWriter = new StreamWriter(fs);
26
string temp = "";
27
try
28
{
29
30
//其实这里直接用SmartExcel会更好
31
m_streamWriter.Flush();
32
// 使用StreamWriter来往文件中写入内容
33
m_streamWriter.BaseStream.Seek(0,SeekOrigin.Begin);
34
// 把richTextBox1中的内容写入文件
35
for (int i = 1; i < rowCount + 1; i++)
36
{
37
temp = "";
38
for (int j = 1; j < colCount + 1; j++)
39
{
40
temp = temp + "^" + dt.Rows[i - 1][j - 1].ToString();
41
}
42
temp = temp.Replace("\r\n", "");
43
temp = temp.Replace("\r", "");
44
temp = temp.Replace("\n", "");
45
46
m_streamWriter.Write(temp);
47
m_streamWriter.WriteLine();
48
}
49
//关闭此文件
50
m_streamWriter.Flush();
51
52
}
53
catch (IOException ee)
54
{
55
Console.WriteLine(ee.Message);
56
}
57
58
finally
59
{
60
if (m_streamWriter != null)
61
m_streamWriter.Close();
62
if(fs != null)
63
fs.Close();
64
}
65
66
}
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67