【VB.NET】直接通过文件结构生成xls文件
这个是给某人做项目的时候写的。

原本是C#的,我改写成VB.NET了,并且编译了一个dll。

--->>>>>>>><<<<<<<<---

测试通过,很好用

原文地址http://blog.csdn.net/jinjazz/archive/2008/08/01/2753869.aspx

调用方法:

Private Sub button1_Click_1(ByVal sender As Object, ByVal e As EventArgs)
    Dim excel As New ExcelWriter(&quot;e:\test.xls&quot;)
    excel.BeginWrite
    excel.WriteString(0, 0, &quot;1&quot;)
    excel.WriteString(0, 1, &quot;2&quot;)
    excel.WriteString(1, 0, &quot;3&quot;)
    excel.WriteNumber(1, 1, 4)
    excel.WriteNumber(2, 1, 5)
    excel.EndWrite
End Sub


这个,要写多维数组到xls就简单了吧 = = 直接循环 嗯

下面是代码

Public Class Exel_Writer
    Dim _r As System.IO.FileStream

    Public Function Init(ByVal strPath As String)
        _r = New System.IO.FileStream(strPath, System.IO.FileMode.OpenOrCreate)
        Return Nothing
    End Function

    Public Sub BeginWrite()
        Me._writeFile(New Short() {&H809, 8, 0, &H10, 0, 0})
    End Sub


    Private Function _writeFile(ByVal values As Short())
        Dim v As Short
        For Each v In values
            Dim b As Byte() = BitConverter.GetBytes(v)
            Me._r.Write(b, 0, b.Length)
        Next
        Return Nothing
    End Function

    Public Function EndWrite()
        Dim CS As Short() = New Short(2 - 1) {}
        CS(0) = 10
        Me._writeFile(CS)
        Me._r.Close()
        Return Nothing
    End Function

    Public Function WriteNumber(ByVal x As Short, ByVal y As Short, ByVal value As Double)
        Dim CS As Short() = New Short(5 - 1) {}
        CS(0) = &H203
        CS(1) = 14
        CS(2) = x
        CS(3) = y
        Me._writeFile(CS)
        Dim b As Byte() = BitConverter.GetBytes(value)
        Me._r.Write(b, 0, b.Length)
        Return Nothing
    End Function

    Public Function WriteString(ByVal x As Short, ByVal y As Short, ByVal value As String)
        Dim b As Byte() = System.Text.Encoding.Default.GetBytes(value)
        Dim CS As Short() = New Short(6 - 1) {}
        CS(0) = &H204
        CS(1) = CShort((b.Length + 8))
        CS(2) = x
        CS(3) = y
        CS(5) = CShort(b.Length)
        Me._writeFile(CS)
        Me._r.Write(b, 0, b.Length)
        Return Nothing
    End Function
End Class


附:原C#代码



24887
来自 科创茶话
 
2009-7-16 02:18:58
1楼
Button1...我又见到了……

话说您直接Imports System.IO不就完了,每次都写一遍累不累(虽然我们有IntelliSense……)

= =...还有无爱的Class1……--~~~~
折叠评论
加载评论中,请稍候...
折叠评论
93°(作者)
2楼
……
好吧,button1是囧3程序特色
折叠评论
加载评论中,请稍候...
折叠评论
3楼
xls还是xlsx?
折叠评论
加载评论中,请稍候...
折叠评论
4楼
_writeFile(new short[] { 0x809, 8, 0, 0x10, 0, 0 }
这种让人看到心里不踏实。

其实写成带分割符的txt, 然后一个批处理导入到excel中就搞定了。
折叠评论
加载评论中,请稍候...
折叠评论
5楼
引用第3楼小光Telnet于2009-07-16 08:01发表的  :
xls还是xlsx?

显然是XLS...XLSX直接imports下XML库就完了
折叠评论
加载评论中,请稍候...
折叠评论
2009-7-18 13:58:25
2009-7-18 13:58:25
93°(作者)
6楼
话说……没人鸟我么 = =
折叠评论
加载评论中,请稍候...
折叠评论
7楼
不错,难以不鸟你,现在授予93°  “XLS勋章”,以资鼓励。
折叠评论
加载评论中,请稍候...
折叠评论
2009-7-21 10:59:28
2009-7-21 10:59:28
8楼
厉害,结构都掌握了.难道想玩fuzz?
折叠评论
加载评论中,请稍候...
折叠评论
2009-8-15 10:52:40
2009-8-15 10:52:40
9楼
有C++版的吗?要是有能在单片机上运行的更好
折叠评论
1
加载评论中,请稍候...
折叠评论
93°(作者)
10楼
引用第9楼warmonkey于2009-08-15 10:52发表的  :
有C++版的吗?要是有能在单片机上运行的更好

把system.IO换成fputc (pia)就可以了。。。。。
折叠评论
加载评论中,请稍候...
折叠评论
2019-10-3 08:50:53
2019-10-3 08:50:53
11楼
引用 warmonkey 发表于 9 楼的内容:
有C++版的吗?要是有能在单片机上运行的更好

单片机?单片机要是有能操作xls的能力(我指的是8051),我还不如移植一个excel上去(即使是2003)

折叠评论
加载评论中,请稍候...
折叠评论
2019-10-4 22:34:18
2019-10-4 22:34:18
12楼
引用 Johnsons 发表于 11 楼的内容:
单片机?单片机要是有能操作xls的能力(我指的是8051),我还不如移植一个excel上去(即使是2.....

arduino已经实现了一些基本的功能,没那么复杂

折叠评论
1
加载评论中,请稍候...
折叠评论
2019-10-5 08:55:16
13楼
引用 warmonkey 发表于 12 楼的内容:
arduino已经实现了一些基本的功能,没那么复杂

正解

很适合做采集之类的东西

折叠评论
加载评论中,请稍候...
折叠评论
14楼

我觉得不一定要xls,可以用像csv这种纯文本的

折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
ID:{{user.uid}}
{{user.username}}
{{user.info.certsName}}
{{user.description}}
{{format("YYYY/MM/DD", user.toc)}}注册,{{fromNow(user.tlv)}}活动
{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png