声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3998|回复: 8

[编程技巧] 如何用matlab编辑word文档中的表格

[复制链接]
发表于 2008-2-27 11:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
小弟在编程中要处理数据到word中,但是希望把数据填写进指定的表格中,试了很多命令都没成功.网上查相关资料似乎没有.问问各位前辈,matlab 写入数据到word表格这种操作怎么做?有相关的资料可查么?
谢谢了
回复
分享到:

使用道具 举报

发表于 2008-2-27 12:36 | 显示全部楼层

回复 楼主 的帖子

我知道excel可以
word没听说过
发表于 2008-2-27 18:13 | 显示全部楼层
在word中用matlab的notebook功能。
搜索论坛和google搜索其他网站吧,内容挺多

评分

1

查看全部评分

 楼主| 发表于 2008-2-28 08:39 | 显示全部楼层

用notebook只是在word中和matlab用动态链接库进行数据交换,一般通过word中的matlab命令,利用matlab强大的数据计算和图像处理能力把数据返回到word中间.
但是我的问题是能在word中已经编辑好的表格中,填入已经在matlab中形成好的数据,说到底还是得用matlab命令把数据填入word表格中间.关键点在于matlab如何控制写入数据到word指定的位置.就算用notebook,最终还是得落实到matlab命令上. 现在小弟的问题就在于此,fprintf,dlmwrite,等写入命令对表格填入似乎都不怎么好.当然,可能是我没有找到好的控制方法呀, 还请各位大哥大姐能帮帮小弟啊!!!!!:'( :'( :'( 你们不知道人工处理振动测试数据,是多么让人崩溃阿.

还请同志们鼎立支持阿,必定我还是matlab菜鸟呢.

[ 本帖最后由 dufdog 于 2008-2-28 08:50 编辑 ]
发表于 2008-2-28 08:54 | 显示全部楼层

回复 4楼 的帖子

表格的话,为什么非要用word呀,excel就很好用啊
 楼主| 发表于 2008-2-28 08:57 | 显示全部楼层
原帖由 sigma665 于 2008-2-27 12:36 发表
我知道excel可以
word没听说过

小西同志的想法很好,这个我也考虑过哈,的确比较可行.但我们的文件是要最终用word形成报告.因为里面有很多固定的格式哈.要是用matlab到excel,其中不仅牵扯到单位程序问题,还要修改试验在excel中的格式打印出来和word格式保持一致.有些恼火阿.

不过小西谢谢你了啊,其实我也在考虑用这个方法哈.我要是用word不好弄的时候,我想这是我唯一可以走的路啊.呵呵.到时候得多费点时间在调整格式上了.
:handshake :handshake
发表于 2008-2-28 19:46 | 显示全部楼层

回复 6楼 的帖子

由于matlab的notebook功能我了解不深,不知道能否解决你的问题。
我可以给你提供另外一个思路:利用word的VBA功能,它支持对表格里的文字进行处理。所以,你可以将matlab数据写到一个txt文件中,然后在word中用VBA去读这些数据,并写到表格的某个cell里。//word的VBA还是挺好用的一个功能,对于自动化处理文档来说,不过我也是简单尝试过,没有太多经验。你可以自己结合帮助好好摸索一下。

在word的VBA帮助中搜索表格,可以出来很多内容,例如下面的:

Word 开发人员参考
处理表格

本主题包含与下列任务相关的 Microsoft Visual Basic 示例:

创建表格、插入文字并应用格式
将文字插入表格单元格
返回表格单元格中的文字,但不包括结束单元格标记
将文本转换为表格
返回每个表格单元格的内容
将活动文档中的所有表格复制到新文档中
创建表格、插入文字并应用格式
下面的示例在活动文档的开头插入一个 4 列 3 行的表格。For Each...Next 结构用于遍历表格中的每个单元格。在 For Each...Next 结构中,Range 对象的 InsertAfter 方法用于将文字添加至表格单元格(单元格 1、单元格 2,等等)。

Sub CreateNewTable()
    Dim docActive As Document
    Dim tblNew As Table
    Dim celTable As Cell
    Dim intCount As Integer

    Set docActive = ActiveDocument
    Set tblNew = docActive.Tables.Add( _
        Range:=docActive.Range(Start:=0, End:=0), NumRows:=3, _
        NumColumns:=4)
    intCount = 1

    For Each celTable In tblNew.Range.Cells
        celTable.Range.InsertAfter "Cell " & intCount
        intCount = intCount + 1
    Next celTable

    tblNew.AutoFormat Format:=wdTableFormatColorful2, _
        ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True
End Sub

将文字插入表格单元格
下面的示例在活动文档中第一个表格的第一个单元格中插入文字。Cell 方法返回单个 Cell 对象。Range 属性返回一个 Range 对象。Delete 方法用于删除现有的文字,而 InsertAfter 方法用于插入文字“Cell 1,1”。

Sub InsertTextInCell()
    If ActiveDocument.Tables.Count >= 1 Then
        With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range
            .Delete
            .InsertAfter Text:="Cell 1,1"
        End With
    End If
End Sub

返回表格单元格中的文字,但不包括结束单元格标记
下面的示例返回并显示文档中第一个表格的第一行中每个单元格的内容。

Sub ReturnTableText()
    Dim tblOne As Table
    Dim celTable As Cell
    Dim rngTable As Range

    Set tblOne = ActiveDocument.Tables(1)
    For Each celTable In tblOne.Rows(1).Cells
        Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _
            End:=celTable.Range.End - 1)
        MsgBox rngTable.Text
    Next celTable
End Sub

Sub ReturnCellText()
    Dim tblOne As Table
    Dim celTable As Cell
    Dim rngTable As Range

    Set tblOne = ActiveDocument.Tables(1)
    For Each celTable In tblOne.Rows(1).Cells
        Set rngTable = celTable.Range
        rngTable.MoveEnd Unit:=wdCharacter, Count:=-1
        MsgBox rngTable.Text
    Next celTable
End Sub

将文本转换为表格
下面的示例在活动文档的开头插入用制表符分隔的文本,然后将这些文本转换为表格。

Sub ConvertExistingText()
    With Documents.Add.Content
        .InsertBefore "one" & vbTab & "two" & vbTab & "three" & vbCr
        .ConvertToTable Separator:=Chr(9), NumRows:=1, NumColumns:=3
    End With
End Sub

返回每个表格单元格的内容
下列示例定义一个数组,该数组的元素个数等于文档中第一张表格(假定为 Option Base 1)中的单元格数。For Each...Next 结构用于返回每个表格单元格的内容,并将文字指定给相应的数组元素。

Sub ReturnCellContentsToArray()
    Dim intCells As Integer
    Dim celTable As Cell
    Dim strCells() As String
    Dim intCount As Integer
    Dim rngText As Range

    If ActiveDocument.Tables.Count >= 1 Then
        With ActiveDocument.Tables(1).Range
            intCells = .Cells.Count
            ReDim strCells(intCells)
            intCount = 1
            For Each celTable In .Cells
                Set rngText = celTable.Range
                rngText.MoveEnd Unit:=wdCharacter, Count:=-1
                strCells(intCount) = rngText
                intCount = intCount + 1
            Next celTable
        End With
    End If
End Sub

将活动文档中的所有表格复制到新文档中
本示例将当前文档中的表格复制到新文档中。

Sub CopyTablesToNewDoc()
    Dim docOld As Document
    Dim rngDoc As Range
    Dim tblDoc As Table

    If ActiveDocument.Tables.Count >= 1 Then
        Set docOld = ActiveDocument
        Set rngDoc = Documents.Add.Range(Start:=0, End:=0)
        For Each tblDoc In docOld.Tables
            tblDoc.Range.Copy
            With rngDoc
                .Paste
                .Collapse Direction:=wdCollapseEnd
                .InsertParagraphAfter
                .Collapse Direction:=wdCollapseEnd
            End With
        Next
    End If
End Sub

评分

1

查看全部评分

 楼主| 发表于 2008-2-29 09:27 | 显示全部楼层

回复 7楼 的帖子

心灯同志的建议不错哈 呵呵 vba的东西我也考虑了 觉得四个软件的数据交换 相当麻烦了 你看pulse---txt----matlab-----word
我希望的是matlab--word
现在的状况是我不得不妥协,因为我没有太多破解pulse软件产生的pls文件数据库的方法,所以不得不变成pulse----matlab-----word

心灯同志的想法很好很强大啊 我会自己好好试验下的.要是行,上论坛好好感谢下哈 .
发表于 2008-2-29 16:56 | 显示全部楼层

回复 8楼 的帖子

matlab是进行数据后处理吧?不知道这一块是不是非matlab不可?若是仅仅利用matlab 的简单编程数值运算功能,word中的VBA差不多也可以实现吧,毕竟它的基础是visual basic,而visual basic也是一种真正的编程及数值运算的语言。 这样,就可以在vba中实现matlab的功能了,不用再用matlab处理。 或者用matlab将后处理程序生成exe文件,然后在word的vba中运行,随即就进行word的数据填写过程,也可以脱离matlab,减少了一个环节,能省事一些。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-12 07:16 , Processed in 0.078947 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表