有个小工作需要,把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
