使用VBA将EXCEL生成PPT

有这样一个需求,将EXCEL中的每行记录自动生成为1张PPT,如下图有2条记录则生成2张PPT。

开发工具--VB编辑器

Project--WPS表格对象--ThisWorkbook--粘贴代码

运行程序,自动生成PPT

复制代码
Sub ExportToPPTAsKeyValueTable_ByRow_AdjustedSize()
    Dim pptApp As Object
    Dim pptPres As Object
    Dim pptSlide As Object
    Dim xlSheet As Worksheet
    Dim lastCol As Long
    Dim lastRow As Long
    Dim i As Long, j As Long
    Dim tbl As Object ' PowerPoint Table
    
    ' 将厘米转换为磅
    Const CM_TO_POINTS As Double = 28.3465
    Dim tableWidth As Double
    Dim tableHeight As Double
    Dim tableLeft As Double
    Dim tableTop As Double
    
    tableWidth = 33.87 * CM_TO_POINTS
    tableHeight = 19.05 * CM_TO_POINTS
    tableLeft = 0
    tableTop = 0
    
    Set xlSheet = ThisWorkbook.Sheets(1)
    
    ' === 获取有效数据范围 ===
    Const xlToLeft As Long = 1
    Const xlUp As Long = -4162
    
    ' 最后一列(基于第1行)
    If Application.WorksheetFunction.CountA(xlSheet.Rows(1)) = 0 Then
        MsgBox "第1行(标题行)为空!", vbExclamation
        Exit Sub
    End If
    lastCol = xlSheet.Cells(1, xlSheet.Columns.Count).End(xlToLeft).Column
    
    ' 最后一行(基于第1列)
    If Application.WorksheetFunction.CountA(xlSheet.Columns(1)) = 0 Then
        MsgBox "第1列无数据!", vbExclamation
        Exit Sub
    End If
    lastRow = xlSheet.Cells(xlSheet.Rows.Count, 1).End(xlUp).Row
    
    ' 至少要有标题 + 1 行数据
    If lastRow < 2 Then
        MsgBox "没有数据行(至少需要第2行)!", vbExclamation
        Exit Sub
    End If
    
    ' === 启动 PowerPoint ===
    On Error Resume Next
    Set pptApp = GetObject(, "PowerPoint.Application")
    If pptApp Is Nothing Then Set pptApp = CreateObject("PowerPoint.Application")
    On Error GoTo 0
    
    If pptApp Is Nothing Then
        MsgBox "无法启动 PowerPoint!", vbCritical
        Exit Sub
    End If
    
    pptApp.Visible = True
    Set pptPres = pptApp.Presentations.Add
    
    ' === 遍历每一行数据(从第2行到lastRow)===
    Dim slideIndex As Long
    For i = 2 To lastRow
        ' 添加新幻灯片
        Set pptSlide = pptPres.Slides.Add(pptPres.Slides.Count + 1, 12) ' 空白版式
        
        ' 创建表格:lastCol 行 × 2 列(不含标题行)
        Set tbl = pptSlide.Shapes.AddTable(lastCol, 2, tableLeft, tableTop, tableWidth, tableHeight).Table
        
        With tbl
            ' --- 数据行(键值对)---
            For j = 1 To lastCol
                .Cell(j, 1).Shape.TextFrame2.TextRange.Text = CStr(xlSheet.Cells(1, j).Value)
                .Cell(j, 2).Shape.TextFrame2.TextRange.Text = CStr(xlSheet.Cells(i, j).Value)
                
                ' 居中对齐
                .Cell(j, 1).Shape.TextFrame2.TextRange.ParagraphFormat.Alignment = 2
                .Cell(j, 2).Shape.TextFrame2.TextRange.ParagraphFormat.Alignment = 2
                
                ' 交替背景色(可选)
                If j Mod 2 = 1 Then
                    .Cell(j, 1).Shape.Fill.ForeColor.RGB = RGB(91, 155, 213)
                    .Cell(j, 2).Shape.Fill.ForeColor.RGB = RGB(91, 155, 213)
                Else
                    .Cell(j, 1).Shape.Fill.ForeColor.RGB = RGB(250, 250, 250)
                    .Cell(j, 2).Shape.Fill.ForeColor.RGB = RGB(250, 250, 250)
                End If
            Next j
            
            ' 调整表格列宽以适应指定宽度
           ' >>> 关键修改:自定义列宽比例 <<<
            .Columns(1).Width = tableWidth * 0.35  ' 字段列窄一些
            .Columns(2).Width = tableWidth * 0.65  ' 值列宽一些
        End With
    Next i
    
    MsgBox "成功导出 " & (lastRow - 1) & " 张幻灯片!", vbInformation
End Sub
相关推荐
码视野16 分钟前
基于 Vue3 + Element Plus 的【微短剧剧本智能创作与分镜生产协同系统】设计与实现(含PRD/三端源码/大屏)
前端·人工智能·vue3
axiao923 分钟前
2026年呼和浩特集团品牌全域传播服务商推荐:GEO优化+短视频+网站+广告全链路机构
大数据·人工智能
朴实赋能25 分钟前
妇儿医院 AI 助手怎么落地?CareWork 本地化智能体的多 Agent 协同与合规边界设计
大数据·人工智能·腾讯云ai代码助手·ai 智能体·医疗多 agent 协同·妇儿医院 ai 助手·本地化部署 ai
circuitsosk2 小时前
NL2SQL在工业级场景下的精度优化:Schema Linking + 动态Few-shot实战
人工智能·python·sql·大模型·nl2sql
9000AI2 小时前
9000AI如何工业化生产流量?高质量规模生产与矩阵化饱和覆盖
人工智能
字节数据平台3 小时前
iDA:从 ChatBI 到专业数据分析助手的演进之路
大数据·人工智能·机器学习·数据分析
warpdrivelabs3 小时前
Codex 开源 harness 全面了解
开发语言·人工智能
mit6.8244 小时前
微软如何交付企业级Agent
人工智能
Mininglamp_27184 小时前
明略科技携手海康机器人亮相世界机器人大会,以“Agent+具身“联合进入商业机器人场景
人工智能·科技·机器人·开源·agent·ai agent
2401_894915534 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎