菜鸟AI - 让提示词生成更简单! 全站导航 全站导航
AI工具安装 新手教程 进阶教程 辅助资源 AI提示词 热点资讯 技术资讯 产业资讯 内容生成 模型技术 AI信息库

已有账号?

首页 > AI资讯新闻 > 2024年SEO标题优化技巧:提升排名与点击率指南
技术资讯 人工智能 SEO标题优化

2024年SEO标题优化技巧:提升排名与点击率指南

2026-06-08
阅读 0
热度 0
作者 菜鸟AI编辑部
摘要

摘要

通过DeepSeek生成VBA代码,实现根据信息总表数据自动填写多个模板工作表,包括按匹配记录

明确几个关键判断:借助DeepSeek自动生成VBA代码,远不止表面上的“如何填表”。今天拆解一个复杂的真实场景——在同一工作簿内,依据汇总数据自动填充多个模板工作表,其中一个模板还需根据匹配条目数动态复制多份。这本质上是多模板、多层级、多条件的自动化流程,而非简单的“一键填表”。

先看几张截图,能直观了解需求细节。

完全使用deepseek自动填写多个Excel工作表

工作簿包含4张表。“信息总表”是数据源,其余三张——“委托单”、“附表”、“符合性声明”——均为模板。任务:根据某个“使用单位名称”,在信息总表中检索所有关联记录,并将这些记录按类别填充到对应模板。关键差异在于:“委托单”需按记录数生成等量副本,“附表”和“符合性声明”则在同一个工作表内逐行追加数据。

下图展示信息总表——所有数据的起点。

图1

接着是模板样式。图2为“委托单”,图3为“附表”,图4为“符合性声明”。注意模板中标有“自动获取”字样的单元格,正是待填充位置。

图2

图3

图4

需求梳理完毕,进入向DeepSeek提问的环节。

提问内容如下:

“附件中有一个包含4个工作表的工作簿,工作表‘信息总表’中包含一系列数据,工作表‘委托单’、‘附表’、‘符合性声明’都是模板。我想新建一个工作簿,其工作表以这三个为模板,然后在原工作簿的‘信息总表’的列A中查找特定的使用单位,根据查找到的使用单位在新建的工作簿中创建新工作表。例如查找‘完美生活服务集团股份有限公司’有2条记录,则在新工作簿中分别以这三个模板创建工作表,并将相关行信息填入这些工作表中带有‘自动获取’字样的单元格中。其中,‘委托单’工作表要创建2个,且‘自动获取’单元格填充的数据为其左侧单元格中的数据在‘信息总表’中查找的结果;‘附表’工作表中以第4行为基础在‘信息总表’中查找对应行的结果,并填充到第5行开始的单元格中;‘符合性声明’工作表中单元格C4填写以其左侧单元格中的数据在‘信息总表’中查找的结果,同时以第6行为基础在‘信息总表’中查找对应行的结果,并填充到第7行开始的单元格中。请帮我使用VBA实现。”

同时附上示例工作簿。DeepSeek分析思路清晰,给出了完整代码。首次运行发现两处错误,随即追问:

“上述代码运行时,发生了两处错误:1. Application.SheetsInNewWorkbook = 0 发生错误;2. cell.Value = filteredData(i)(colIndex) 发生‘类型不匹配’错误。”

DeepSeek分析了错误原因并给出修正。再次运行,出现新错误。继续追问:

“上述代码中的 newWs.Range('H' &.Rows.Count).End(xlUp).Offset(1).Value = detecDate 这句中的.Rows.Count为无效引用,请修改。”

修正后的代码基本完整,仅剩一个数据格式转换的小问题。于是第二次追问:

“上述代码会将复制后的‘设备代码’变成科学计数法,请修正。”

DeepSeek解决了该问题。

微调后的最终代码如下:

Sub GenerateNewWorkbook()
    Dim srcWb As Workbook, destWb As Workbook
    Dim infoSheet As Worksheet, tempSheet As Worksheet
    Dim criteria As String, lastRow As Long, i As Long, j As Long
    Dim headerDict As Object, dataArr As Variant, filteredData As Collection
    Dim ws As Worksheet, newWs As Worksheet, cell As Range
    Dim fieldName As String, colIndex As Long, targetRow As Long
    Dim rowData() As Variant

    Set srcWb = ThisWorkbook
    Set infoSheet = srcWb.Sheets("信息总表")
    criteria = InputBox("请输入需要筛选的使用单位名称:")

    ' 获取信息总表数据
    lastRow = infoSheet.Cells(infoSheet.Rows.Count, "A").End(xlUp).row
    dataArr = infoSheet.Range("A1:V" & lastRow).Value

    ' 创建标题字典
    Set headerDict = CreateObject("Scripting.Dictionary")
    For j = 1 To UBound(dataArr, 2)
        headerDict(Trim(dataArr(1, j))) = j
    Next j

    ' 筛选目标数据(存储整行数据)
    Set filteredData = New Collection
    For i = 2 To UBound(dataArr, 1)
        If dataArr(i, headerDict("使用单位名称")) = criteria Then
            ReDim rowData(1 To UBound(dataArr, 2))
            For j = 1 To UBound(dataArr, 2)
                rowData(j) = dataArr(i, j)
            Next j
            filteredData.Add rowData
        End If
    Next i

    If filteredData.Count = 0 Then Exit Sub

    ' 创建新工作簿(不再设置SheetsInNewWorkbook)
    Set destWb = Workbooks.Add

    ' ===== 处理委托单 =====
    For i = 1 To filteredData.Count
        srcWb.Sheets("委托单").Copy After:=destWb.Sheets(destWb.Sheets.Count)
        Set newWs = destWb.ActiveSheet
        newWs.Name = "委托单_" & i

        ' 替换自动获取内容(新增设备代码格式处理)
        For Each cell In newWs.UsedRange
            If InStr(cell.Value, "自动获取") > 0 Then
                fieldName = Split(cell.Value, "自动获取")(1)
                fieldName = Trim(fieldName)
                If headerDict.Exists(fieldName) Then
                    colIndex = headerDict(fieldName)
                    cell.NumberFormat = "@"  ' 强制设为文本格式
                    cell.Value = CStr(filteredData(i)(colIndex))  ' 转换为字符串

                    ' 特殊处理设备代码(保留完整数字)
                    If fieldName = "设备代码" Then
                        cell.Value = "'" & CStr(filteredData(i)(colIndex))  ' 添加单引号保留格式
                    End If
                End If
            End If
        Next cell

        ' 处理拟检测日期(修正无效引用)
        On Error Resume Next
        Dim detecDate As Date
        ' 提取检测时间并去除时间部分(如存在)
        Dim rawDate As String
        rawDate = filteredData(i)(headerDict("检测时间"))
        If InStr(rawDate, " ") > 0 Then
            rawDate = Split(rawDate, " ")(0)  ' 仅保留日期部分
        End If
        detecDate = DateAdd("m", -1, CDate(rawDate))

        ' 找到H列最后一个非空单元格的下方插入新日期
        With newWs
            Dim lastRowH As Long
            lastRowH = .Cells(.Rows.Count, "H").End(xlUp).row
            .Cells(lastRowH + 1, "H").Value = Format(detecDate, "yyyy-mm-dd")
        End With
        On Error GoTo 0
    Next i

    ' ===== 处理附表 =====
    srcWb.Sheets("附表").Copy After:=destWb.Sheets(destWb.Sheets.Count)
    Set newWs = destWb.ActiveSheet
    newWs.Name = "附表"
    targetRow = 5

    For i = 1 To filteredData.Count
        With newWs
            ' 设备代码特殊处理(C列)
            .Cells(targetRow, 3).NumberFormat = "@"
            .Cells(targetRow, 3).Value = "'" & CStr(filteredData(i)(headerDict("设备代码")))

            ' 其他字段正常写入
            .Cells(targetRow, 1) = i
            .Cells(targetRow, 2) = filteredData(i)(headerDict("单位内编号"))
            .Cells(targetRow, 4) = filteredData(i)(headerDict("载重量(kg)"))
            .Cells(targetRow, 5) = filteredData(i)(headerDict("层站数"))
            .Cells(targetRow, 6) = filteredData(i)(headerDict("速度(m/s)"))
            .Cells(targetRow, 7) = filteredData(i)(headerDict("检测时间"))
            .Cells(targetRow, 8) = filteredData(i)(headerDict("费用"))
        End With
        targetRow = targetRow + 1
    Next i

    ' ===== 处理符合性声明 =====
    srcWb.Sheets("符合性声明").Copy After:=destWb.Sheets(destWb.Sheets.Count)
    Set newWs = destWb.ActiveSheet
    newWs.Name = "符合性声明"

    ' 设备代码特殊处理(A列)
    targetRow = 7
    For i = 1 To filteredData.Count
        With newWs
            .Cells(targetRow, 1).NumberFormat = "@"
            .Cells(targetRow, 1).Value = "'" & CStr(filteredData(i)(headerDict("设备代码")))
            .Cells(targetRow, 2) = filteredData(i)(headerDict("产品编号"))
            .Cells(targetRow, 3) = filteredData(i)(headerDict("登记证编号"))
            .Cells(targetRow, 4) = filteredData(i)(headerDict("单位内编号"))
        End With
        targetRow = targetRow + 1
    Next i

    ' 删除默认Sheet1(如果存在)
    On Error Resume Next
    Application.DisplayAlerts = False
    destWb.Sheets("Sheet1").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0

    ' 保存
    destWb.Sa veAs "Generated_Report.xlsx"
    MsgBox "处理完成!", vbInformation
End Sub

运行后的效果,如图5和图6所示。

图5

图6

这个案例再次印证:DeepSeek的编程能力确实扎实,但关键在于提问是否细致、思路是否清晰。一份条理分明的需求,远比模糊描述更容易产出可直接执行的代码。

来源:互联网

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

同类文章推荐

相关文章推荐

更多