使用 C# 在每张幻灯片中划分五个项目符号

本文关键字:五个 符号 项目 划分 幻灯片 使用 | 更新日期: 2023-09-27 18:35:50

我想计算每张幻灯片中的项目符号,如果幻灯片包含四个以上的项目符号,则剩余的项目符号将移动到新创建的幻灯片中,但如果剩余项目符号大于四个,则将四个放入一张幻灯片中,并且铰孔将转移到另一张幻灯片上。 如果幻灯片包含五个以上的项目符号,则此代码计算每张幻灯片中的项目符号数,则它将项目符号移动到新创建的幻灯片中。但这不能正常工作.帮助解决这个问题.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;
namespace PPTBullets
{
    class Program
    {
        static void Main(string[] args)
        {
            Application app = new Application();
            app.Visible = MsoTriState.msoTrue;
            Presentation pres = app.Presentations.Open(@"C:'test.pptx");
           Application app = new Application();
            app.Visible = MsoTriState.msoTrue;
            Presentation pres = app.Presentations.Open(fileName);
            int toAdd = 1;
            for (int slideCount = 1; slideCount <= pres.Slides.Count; slideCount++)
            {
                Slide slide = pres.Slides[slideCount];
                foreach (object item in pres.Slides[slideCount].Shapes) //get all objects in all slides
                {
                int bulletCount = 0;
                int paragraphCount=0;
                    var shape = (Microsoft.Office.Interop.PowerPoint.Shape)item;
                    if (shape.HasTextFrame == MsoTriState.msoTrue)
                    {
                        if (shape.HasTextFrame == MsoTriState.msoTrue)
                        {
                            Microsoft.Office.Interop.PowerPoint.TextFrame2 textFrame = shape.TextFrame2;
                            TextRange2 textRange = textFrame.TextRange;
                            TextRange2 ps = textRange.Paragraphs;
                            paragraphCount = ps.Count;
                            for (int i = 1; i <= paragraphCount; i++)
                            {
                                BulletFormat2 bulletFormat2 = ps.Item(i).ParagraphFormat.Bullet;
                                if (bulletFormat2.Type != MsoBulletType.msoBulletNone)
                                {
                                    //this paragraph has has bullet
                                    bulletCount++;
                                }
                            }
                            if (bulletCount > 4)
                            {        
                                //create new slide, cut this paragraph and paste in the new slide
                                Slide tempSlide = pres.Slides.AddSlide(2, pres.Slides[1].CustomLayout);
                                ps.Item(slideCount).Cut();
                               tempSlide.Shapes[2].TextFrame.TextRange.Paste();
                            }
                        }
                    }
                 }
            }
             pres.Save();
              pres.Close();
                app.Quit();
        }

使用 C# 在每张幻灯片中划分五个项目符号

您的子弹计数不在正确的位置。

internal class Program
{
    private static void Main(string[] args)
    {
        var app = new Application { Visible = MsoTriState.msoTrue };
        Presentation pres = app.Presentations.Open(@"C:'test.pptx");
        for (int slideCount = 1; slideCount <= pres.Slides.Count; slideCount++)
        { 
            int bulletCount = 0;
            foreach (object item in pres.Slides[slideCount].Shapes) //get all objects in all slides
            {
                var shape = (Microsoft.Office.Interop.PowerPoint.Shape)item;
                if (shape.HasTextFrame == MsoTriState.msoTrue)
                {
                    var paragraphs = shape.TextFrame2.TextRange.Paragraphs;
                    for (int i = 1; i <= paragraphs.Count; i++)
                    {
                        BulletFormat2 bulletFormat2 = paragraphs.Item(i).ParagraphFormat.Bullet;
                        if (bulletFormat2.Type != MsoBulletType.msoBulletNone)
                        {
                            //this paragraph has has bullet
                            bulletCount++;
                        }
                    }
                    if (bulletCount > 4)
                    {
                        //create new slide, cut this paragraph and paste in the new slide
                        Slide tempSlide = pres.Slides.AddSlide(2, pres.Slides[1].CustomLayout);
                        paragraphs.Item(slideCount).Cut();
                        tempSlide.Shapes[2].TextFrame.TextRange.Paste(); 
                    }
                }
            }
        }
        pres.Save();
        pres.Close();
        app.Quit();
    }
}

public void DivideBullets(Presentation presentation, int slideIndex) {

        var list = new ArrayList();
        new ArrayList();
        int toadd = 1;
        var newlst = new ArrayList();
        var str = new string[4];
        string strHeader = "";
        ArrayList lst = new ArrayList();
        int shapeCount = 0;
        foreach (object item in presentation.Slides[slideIndex].Shapes) //get all objects in all slides
            {
            int bulletCount = 0;
            int paragraphCount=0;
                var shape = (Microsoft.Office.Interop.PowerPoint.Shape)item;
                if (shape.HasTextFrame == MsoTriState.msoTrue)
                {
                    if (shape.HasTextFrame == MsoTriState.msoTrue)
                    {
                        shapeCount +=1;
                        if (shapeCount == 1)
                        {
                            strHeader = shape.TextFrame.TextRange.Text;
                        }
                        Microsoft.Office.Interop.PowerPoint.TextFrame2 textFrame = shape.TextFrame2;
                        TextRange2 textRange = textFrame.TextRange;
                        TextRange2 ps = textRange.Paragraphs;
                        paragraphCount = ps.Count;
                        for (int bullet = 1; bullet <= paragraphCount; bullet++)
                        {
                            BulletFormat2 bulletFormat2 = ps.Item(bullet).ParagraphFormat.Bullet;
                            if (bulletFormat2.Type != MsoBulletType.msoBulletNone)
                            {
                                //this paragraph has has bullet
                                bulletCount++;
                                //MessageBox.Show( ps.Item(i).Text);
                                if (bulletCount > 4)
                                {
                                    //create new slide, cut this paragraph and paste in the new slide
                                    list.Add(ps.Item(bullet).Text);
                                }
                                newlst.Add(ps.Item(bullet).Text);
                                lst.Add(ps.Item(bullet).Text);
                            }
                        }
                    }
                }
            }
            int slideCounter = 0;
            if (newlst.Count <= 4)
            {
                newlst.Clear();
            }
            else
            {
               // strHeader = newlst[0].ToString();
                newlst.CopyTo(0, str, 0, 4);
                AddNewPptSlide(presentation, slideIndex + toadd, str, strHeader,0,_standard); // adding new slide
                toadd += 1;
                str[0] = "";
                str[1] = "";
                str[2] = "";
                str[3] = "";
                slideCounter = slideCounter + 1;
            }
            if (list.Count > 0)
            {
                int xx = 0;
                for (int x = 0; xx < list.Count; x++)
                {
                    str[x] = list[xx].ToString();
                    if (x == 3)
                    {
                        AddNewPptSlide(presentation, slideIndex + toadd, str, strHeader, 1, _standard); // adding new slide
                        toadd += 1;
                        slideCounter = slideCounter + 1;
                        str[0] = "";
                        str[1] = "";
                        str[2] = "";
                        str[3] = "";
                        x = -1;
                    }
                    xx++;
                } //End for (int x = 0; xx < list.Count; x++)
                if (list.Count % 4 != 0)
                {
                    AddNewPptSlide(presentation, slideIndex + toadd, str, strHeader, 1, _standard); // adding new slide
                    toadd += 1;
                } // if (list.Count%4!= 0)
            } //if(list.Count>0)
            newlst.Clear();
            list.Clear(); //clear ArrayList
            strHeader = "";
            if (lst.Count > 4)
            {
                presentation.Slides[slideIndex].Delete();
            }
        }