如何在 Microsoft Excel 中将图形保存为 PNG 或 GIF 文件?

fma*_*ark 27 png gif charts microsoft-excel

如何在 Microsoft Excel 中将图形保存为 PNG 或 GIF 文件?

我知道我可以另存为 HTML 文件并使用在那里创建的图像,但我怀疑有一种方法不会创建我不想要的其他混乱文件。如果这是推荐的选项,我很乐意安装加载项。

如果重要的话,我正在使用 Excel 2003 和 2007。

DMA*_*361 34

Excel中缺少这种功能的任何用户访问的支持,但是你可以很容易地解决这个或挖掘到VBA,在此功能提供:


“一键”导出

  • 选择图形(整个图形,而不是内部组件;因此选择边框)。
  • 复制它(ctrl-c,右键单击复制,任何你喜欢的)。
  • 打开 MS Paint。
  • 粘贴(您可能希望首先最小化图像尺寸,它会放大以适合,但不会缩小)。
  • 根据需要保存。

批量导出

您可能希望查看在ActiveChart.ExportVBA 宏中使用,这可以让您指定文件路径,然后让 Excel 完成工作。

下面是我刚刚组装的一个工作原型。运行此操作,活动工作簿中的每个图表都将以 PNG 格式导出到与该文件相同的文件夹中,_chart##并附加到文件名(其中##是递增的数字)。

执行任何安全检查(因此会覆盖文件!)并且包含任何错误检查。它不会工作,如果你还没有保存工作簿,位置是只读的或其他任何阻止写入文件的位置。我只在 Excel 2003 中测试过这个(因为这就是我目前需要做的所有事情)。

换句话说:使用风险自负,这只是一个基本的工作示例

'small nicety to ensure two-digits for better file sorting'
Function NiceFileNumber(num As Integer) As String
    If num < 10 Then
        NiceFileNumber = "0" & num
    Else
        NiceFileNumber = num
    End If
End Function

'the real function'
Sub ExportAllCharts()
    Dim i As Integer, exportCount As Integer
    Dim fileNum As String, fileBase As String
    Dim sheetObj As Worksheet
    Dim chartObj As Chart
    
    'current file location and name, with extension stripped'
    fileBase = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".") - 1)
    exportCount = 0

    'First, export all charts that are in their own sheets'
    For Each chartObj In ActiveWorkbook.Charts
        fileNum = NiceFileNumber(exportCount)
        exportCount = exportCount + 1

        'Do the export'
        chartObj.Export fileBase & "_chart" & fileNum & ".png"
    Next
    
    'Then, export all charts that are embedded inside normal sheets'
    For Each sheetObj In ActiveWorkbook.Worksheets
        For i = 1 To sheetObj.ChartObjects.count
            fileNum = NiceFileNumber(exportCount)
            exportCount = exportCount + 1
            
            'Do the export'
            sheetObj.ChartObjects(i).Activate
            ActiveChart.Export fileBase & "_chart" & fileNum & ".png"
        Next i
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

注意:我在's 的两端都包含了注释,这不是必需的,但有助于确保它们在此处正确着色。