C#を利用してWord文書のテキストを読み取る方法

今回の文章でC#を使用してWord文書のテキストを読み取る方法を紹介しようと思います。Free Spire.Docは、Word文書のテキストを読み取るについて、二つの方法を提供しています。一つは、ドキュメント内のすべてのテキストコンテンツを直接取得すること、もう一つは、ドキュメント内のセクションと段落をトラバースしてから、段落内のテキストを取得すること。これからはこの2種の方法を詳しく紹介します。

Wordドキュメントのスクリーンショット:

f:id:uha_noki:20211021174956p:plain

次のコードを使用する前に、Visual StudioでC#アプリケーションを作成してから、Spire.Doc.dllをプログラムに参照する必要があります。

方法一:直接ドキュメント内のすべてのテキストを取得

using Spire.Doc;

using System.IO;

namespace WordText

{

    class Program

    {

        static void Main(string args)

        {

            //Wordドキュメントをロードする

            Document doc = new Document();

            doc.LoadFromFile("Input.docx");

            //GetTextメソッドを使用してドキュメント内の全てのテキストを取得する

            string s = doc.GetText();

            File.WriteAllText("text1.txt", s.ToString());

        }

    }

}

効果は以下のようになります:

f:id:uha_noki:20211021175105p:plain

方法二:段落をトラバースしてテキストを取得する

using Spire.Doc;

using Spire.Doc.Documents;

using System.IO;

using System.Text;

namespace WordText

{

    class Program

    {

        static void Main(string args)

        {

            //Wordドキュメントをロードする

            Document document = new Document();

            document.LoadFromFile(@"テキストドキュメント.docx");

            StringBuilder sb = new StringBuilder();

            //ドキュメント内のセクションと段落をトラバースしてから、段落内のテキストを取得する

            foreach (Section section in document.Sections)

            {

                foreach (Paragraph paragraph in section.Paragraphs)

                {

                    sb.AppendLine(paragraph.Text);

                }

            }

            File.WriteAllText("text2.txt", sb.ToString());

        }

    }

}

効果は以下のようになります:

f:id:uha_noki:20211021175123p:plain

結論:

これら2つの方法は結果として似ていますが、最初の方法はより単純です。1番目の方法はドキュメントのコンテンツを一度に取得できますけど、2番目の方法はドキュメントの指定されたセクションまたは段落のテキストを取得できるのでより柔軟性があります。とにかく実際の必要に応じて適切な方法を選択してください。それでは文章が終わります、お読みいただき、ありがとうございます!

C#を使用してPDFドキュメントを圧縮する方法

PDFドキュメントは、私たちの日常の仕事で頻繁に使用されている文書です。ある時PDF文書が大きすぎると、送信することが困難になります。この記事では、C#およびSpire.PDFコンポーネントを使用してPDFドキュメントを圧縮する方法を紹介します。

Spire.PDFには、主に2つの圧縮方法があります。1つはファイルの内容を圧縮する方法で、もう1つはファイル内の画像を圧縮する方法です。画像を圧縮するには、画像の質量を下げると直接圧縮するという2つの異なる方法に分けられます。注意すべきことは、圧縮効果はドキュメントごとに異なりますが、これは主にPDFコンテンツ自体に関連しています。たとえば、テキストが多いドキュメントと画像が多いドキュメントの効果は異なります。ドキュメントに応じて、対応する圧縮方法を選択できます。

コードを使用する前に、以下のものが必要です:

  1. PDFをダウンロードして、インストールパスからアプリケーションへのSpire.Pdf.dllを参照します
  2. 名前空間を参照します

using System.Drawing;

using Spire.Pdf;

using Spire.Pdf.Exporting;

using Spire.Pdf.Graphics;

内容を圧縮する

using System.Drawing;

using Spire.Pdf;

using Spire.Pdf.Exporting;

using Spire.Pdf.Graphics;

namespace PDF_compression

{

    class Program

    {

        static void Main(string args)

        {

            //PDFドキュメントをロードする

            PdfDocument doc = new PdfDocument("Test.pdf");

 

            //incremental updateを無効にする

            doc.FileInfo.IncrementalUpdate = false;

 

            //PDFドキュメントの圧縮クラスを設定する

            doc.CompressionLevel = PdfCompressionLevel.Best;

 

            //ドキュメントを保存する

            doc.SaveToFile("Compressed.pdf");

        }

    }

}

f:id:uha_noki:20211018145428p:plain

画像を圧縮する

方法一:画像の質量を下げる

using System.Drawing;

using Spire.Pdf;

using Spire.Pdf.Exporting;

using Spire.Pdf.Graphics;

namespace PDF_compression{

    class Program

    {

        static void Main(string args)

        {

            //PDFドキュメントをロードする

            PdfDocument doc = new PdfDocument("Image.pdf");

 

            //incremental updateを無効にする

            doc.FileInfo.IncrementalUpdate = false;

 

            //ドキュメントのすべてのページをトラバースする

            foreach (PdfPageBase page in doc.Pages)

            {

                //ページ内の画像を抽出する

                Image images = page.ExtractImages();

 

                if (images != null && images.Length > 0)

                {

                    //すべての写真をトラバースする

                    for (int j = 0; j < images.Length; j++)

                    {

                        Image image = images[j];

 

                        PdfBitmap bp = new PdfBitmap(image);

 

                        //画像の質量を下げる

                        bp.Quality = 20;

 

                        //元のドキュメントの画像を圧縮画像に置き換える

                        page.Replace Image(j, bp);

                    }

                }

            }

            //ドキュメントを保存する

            doc.SaveToFile("Output.pdf");

        }

    }

}

f:id:uha_noki:20211018145514p:plain

方法二:直接画像を圧縮する

using System.Drawing;

using Spire.Pdf;

using Spire.Pdf.Exporting;

using Spire.Pdf.Graphics;

namespace PDF_compression{

class Program

    {

        static void Main(string args)

        {

            //PDFドキュメントをロードする

            PdfDocument doc = new PdfDocument("Image.pdf");

 

            //incremental updateを無効にする

            doc.FileInfo.IncrementalUpdate = false;

 

            //すべてのPDFページをトラバースする

            foreach (PdfPageBase page in doc.Pages)

            {

                if (page != null)

                {

                    if (page.ImagesInfo != null)

                    {

                        foreach (PdfImageInfo info in page.ImagesInfo)

                        {

                            //画像を圧縮する

                            page.TryCompressImage(info.Index);

                        }

                    }

                }

            }

            //ドキュメントを保存する

            doc.SaveToFile("Output1.pdf");

        }

    }

}

f:id:uha_noki:20211018145530p:plain

ここで終わります、PDFドキュメントを圧縮する方法を存分に理解しましたよね、ではまた!

C#でWord文書に図形とグループ図形を挿入する方法

Word文書を作成する場合、文書にいくつかの形状を追加する必要がある場合があります。追加後、各形状は独立していますが、形状が多い場合は、これらの形状を1つにまとめて、簡単に操作することもできます。この記事では、C#およびSpire.Docコンポーネントを使用して、Word文書に形状を挿入し、形状を結合する方法を紹介します。

コードを使用する前に、以下のものが必要です:

  1. Spire.Docをダウンロードし、インストールフォルダーからアプリケーションにSpire.Doc.dllを参照します
  2. 名前空間を参照します:

using System.Drawing;

using Spire.Doc;

using Spire.Doc.Documents;

using Spire.Doc.Fields;

 

形状を挿入します:

using System.Drawing;

using Spire.Doc;

using Spire.Doc.Documents;

using Spire.Doc.Fields;

namespace WordShape

{

    class Program

    {      

               static void Main(string args)

        {

            //Documentインスタンスを作成する

            Document doc = new Document();

 

            //セクションを追加する

            Section sec = doc.AddSection();

 

            //段落を追加する

            Paragraph para1 = sec.AddParagraph();

 

            //長方形を挿入してサイズを設定する

            ShapeObject shape1 = para1.AppendShape(50, 100, ShapeType.Rectangle);

 

            //塗りつぶしの色を設定する

            shape1.FillColor = Color.LightSkyBlue;

 

            //形状の位置を指定する

            shape1.HorizontalPosition = 50;

            shape1.VerticalPosition = 30;

 

            //楕円形を挿入してサイズを設定する

            ShapeObject shape2 = para1.AppendShape(100, 100, ShapeType.Ellipse);

 

            //塗りつぶしの色を設定する

            shape2.FillColor = Color.LightSkyBlue;

 

            //形状の位置を指定する

            shape2.HorizontalPosition = 150;

            shape2.VerticalPosition = 30;

 

            //三角形を挿入してサイズを設定する

            ShapeObject shape3 = para1.AppendShape(100, 100, ShapeType.Triangle);

 

            //塗りつぶしの色を設定する

            shape3.FillColor = Color.LightSkyBlue;

 

            //形状の位置を指定する

            shape3.HorizontalPosition = 300;

            shape3.VerticalPosition = 30;

 

            //文書を保存する 

            doc.SaveToFile("InsertShapes.docx", FileFormat.Docx2010);

        }

    }

}

最終の効果は以下のようになります:

f:id:uha_noki:20211014160717p:plain

形状グループを挿入します:

using System.Drawing;

using Spire.Doc;

using Spire.Doc.Documents;

using Spire.Doc.Fields;

namespace WordShape

{

    class Program

    {

        static void Main(string args)

        {

            //Documentインスタンスを作成する

            Document doc = new Document();

 

            //セクションを追加する

            Section sec = doc.AddSection();

 

            //段落を追加する

            Paragraph para = sec.AddParagraph();

 

            //形状グループを作成してサイズを設定する

            ShapeGroup group = para.AppendShapeGroup(300, 200);

 

            //形状グループに長方形を追加する

            group.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle)

            {

                Width = 50,

                Height=200,

                HorizontalPosition=225,

                VerticalPosition=50,

                FillColor=Color.LightSkyBlue,

            });

 

            //形状グループに楕円形を追加する

            group.ChildObjects.Add(new ShapeObject(doc, ShapeType.Ellipse)

            {

                Width=200,

                Height=200,

                HorizontalPosition=150,

                VerticalPosition=150,

                FillColor=Color.LightSkyBlue,

            });

 

            //形状グループに長方形を追加する

            group.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle)

            {

                Width=200,

                Height=200,

                HorizontalPosition=150,

                VerticalPosition=250,

                FillColor=Color.LightSkyBlue,

            });

 

            //文書を保存する

            doc.SaveToFile("InsertShapegroups.docx", FileFormat.Docx2010);

        }

    }

}

最終の効果は以下のようになります:

f:id:uha_noki:20211014160750p:plain

すごく簡単で便利でしょう、では最後までお読みいただき、誠にありがとうございます。

C#を使用してPDFページを2つ以上のページに分割する方法

日常生活の中で、PDFドキュメントを複数のPDFに分割することに加えて、PDFページを2つ以上のページに分割する必要がある場合もあります。この記事では、C#を使用してPDFページを水平方向と垂直方向に2つ以上のページに分割する方法について説明します。

この記事で使用されているPDFコンポーネント:Spire.PDF for .NET(バージョン5.1.4及びその以上)

以下紹介されているコードを使用する前に、次の2つのアドレスのいずれかからSpire.Pdf.dllをダウンロードできます。

  1. 公式サイトからダウンロードする:Spire.PDF for .NET
  2. ①Visual Studio ツール NuGetパッケージマネージャー ソリューションのNuGetパッケージの管理から、検索バーでPDF for.NETを検索します プロジェクトに直接インストールします

処理する前のPDFドキュメントは以下のようになります:

f:id:uha_noki:20211014122350p:plain

(1)水平方向に

using System.Drawing;

using Spire.Pdf;

using Spire.Pdf.Graphics;

namespace SplitPDFPage

{

    class Program

    {

        static void Main(string args)

        {

            //PDFドキュメントをロードする

            PdfDocument pdf = new PdfDocument();

            pdf.LoadFromFile("Sample.pdf");

 

            //1ページ目を取得する

            PdfPageBase page = pdf.Pages[0];

 

            //新しいPDFドキュメントを作成する

            PdfDocument newPdf = new PdfDocument();

 

            //新しく作成されたPDFドキュメントのページ余白を削除する

            newPdf.PageSettings.Margins.All = 0;

 

            //新しいPDFドキュメントのページ幅を元のPDFドキュメントの最初のページの幅と等しくなるように設定し、高さを元のPDFドキュメントの最初のページのページ高さの半分に設定しする

            newPdf.PageSettings.Width = page.Size.Width;

            newPdf.PageSettings.Height = page.Size.Height / 2;

 

            //新しいページを新しく作成されたPDFドキュメントに追加する

            PdfPageBase newPage = newPdf.Pages.Add();

 

            //ページコンテンツがいっぱいになった後の自動ページング

            PdfTextLayout format = new PdfTextLayout();

            format.Break = PdfLayoutBreakType.FitPage;

            format.Layout = PdfLayoutType.Paginate;

 

            //元のPDFドキュメントの最初のページのコンテンツを新しく作成されたPDFのページに描画する

            page.CreateTemplate().Draw(newPage, new PointF(0, 0), format);

 

            //ドキュメントを保存する

            newPdf.SaveToFile("HorizontallySplit.pdf");

 

            //シャットダウンする

            newPdf.Close();

            pdf.Close();

        }

    }

}

水平方向に2つのページに分割した効果は以下のようになります:

f:id:uha_noki:20211014122408p:plain

(2)垂直水平に

using System.Drawing;

using Spire.Pdf;

using Spire.Pdf.Graphics;

namespace SplitPDFPage

{

    class Program

    {

        static void Main(string args)

        {

            //PDFドキュメントをロードする

            PdfDocument pdf = new PdfDocument();

            pdf.LoadFromFile("Sample.pdf");

 

            //1ページ目を取得する

            PdfPageBase page = pdf.Pages[0];

 

            //新しいPDFドキュメントを作成する

            PdfDocument newPdf = new PdfDocument();

 

            //新しく作成されたPDFドキュメントのページ余白を削除する

            newPdf.PageSettings.Margins.All = 0;

 

            //新しいPDFドキュメントのページ高さのPDFドキュメントの最初のページの高さと等しくなるように設定し、幅を元のPDFドキュメントの最初のページの幅の半分に設定しする

            newPdf.PageSettings.Width = page.Size.Width / 2;

            newPdf.PageSettings.Height = page.Size.Height;

 

            //新しいページを新しく作成されたPDFドキュメントに追加する

            PdfPageBase newPage = newPdf.Pages.Add();

 

            //ページコンテンツがいっぱいになった後の自動ページング

            PdfTextLayout format = new PdfTextLayout();

            format.Break = PdfLayoutBreakType.FitPage;

            format.Layout = PdfLayoutType.Paginate;

 

            //元のPDFドキュメントの最初のページのコンテンツを新しく作成されたPDFのページに描画する

            page.CreateTemplate().Draw(newPage, new PointF(0, 0), format);

 

            //ドキュメントを保存する

            newPdf.SaveToFile("VerticallySplit.pdf");

 

            //シャットダウンする

            newPdf.Close();

            pdf.Close();

        }

    }

}

垂直方向に2つのページに分割した効果は以下のようになります:

f:id:uha_noki:20211014122423p:plain

上記のコードはPDFページを2ページに分割するだけです。複数のページに分割する必要がある場合、たとえば、水平方向に4ページに分割したいならと、新しいPDFのページの高さを元のページの高さの1/4に設定したらいいです。では今回の紹介はここまで、またね!

C#でSpire.Docを利用してWordドキュメントへの操作まとめ

どんな領域の仕事でもWordドキュメントは欠かせないものでしょう。しかしネットで検索できる多くのソフトの機能は不完全であるか、同一のものを重複しています。ようやく完全な機能を備えたソフトを見つけたら有料です。でも安心して、ここで無料かつ我々の要求をかなえるC#ライブラリーがでました、そして、以下はその強力な無料ライブラリーをとことん紹介しますね。

 

まずはどうやって手に入れますか?

無料版Spire.Docコンポーネントをダウンロード:Free Spire.Doc for.Net

またこの文章から直接MSIファイルをダウンロードすることもできます、これはソースコードも提供します。

 

Wordドキュメントへの操作まとめ

 

1. 既に存在しているWordドキュメントを開くこと、これはWordドキュメントを処理するもっとも必要と基礎的な手順です。このコンポーネントは3つの方法を提供しています。

方法1 既知の特定なWordドキュメントから新しいDocumentクラスのインスタンスを初期化します

Document document = new Document(@"..\..\Sample.docx");

方法2 フォルダからWordドキュメントをロードします

Document document = new Document();

document.LoadFromFile(@"..\..\Sample.docx");

方法3 ストリームファイルからWordドキュメントをロードします

Stream stream = File.OpenRead(@"..\..\Sample.docx");

Document document = new Document(stream);

 

2. どうやってテーブルを作成しますか?

using Spire.Doc;

using Spire.Doc.Documents;

using Spire.Doc.Fields;

namespace word

{

    class Program

    {

        static void Main(string args)

        {

            Document document = new Document();

            Section section = document.AddSection();

 

            Table table = section.AddTable(true);

            table.ResetCells(2, 3);

 

            TableRow row = table.Rows[0];

            row.IsHeader = true;

 

            Paragraph para = row.Cells[0].AddParagraph();

            TextRange TR = para.AppendText("Item");

 

            para = row.Cells[1].AddParagraph();

            TR = para.AppendText("Description");

 

            para = row.Cells[2].AddParagraph();

            TR = para.AppendText("Qty");

 

            document.SaveToFile("WordTable.docx");

            System.Diagnostics.Process.Start("WordTable.docx");

        }

    }

}

f:id:uha_noki:20211014101402p:plain

行の高さと列の幅を設定することもできます。

3. どうやってハイパーリンクを追加しますか?ここで、EmailリンクとWebmailリンクという二つの種類のハイパーリンクを追加することができます

using Spire.Doc;

using Spire.Doc.Documents;

namespace word

{

    class Program

    {

        static void Main(string args)

        {

            Document document = new Document();

            Section section = document.AddSection();

 

            //URLハイパーリンクを挿入する

            Paragraph paragraph = section.AddParagraph();

            paragraph.AppendText("ホームページ");

            paragraph.ApplyStyle(BuiltinStyle.Heading2);

            paragraph = section.AddParagraph();

            paragraph.AppendHyperlink("www.e-iceblue.com", "www.e-iceblue.com", HyperlinkType.WebLink);

 

            // emailアドレスハイパーリンクを挿入する

            paragraph = section.AddParagraph();

            paragraph.AppendText("お問い合わせ");

            paragraph.ApplyStyle(BuiltinStyle.Heading2);

            paragraph = section.AddParagraph();

            paragraph.AppendHyperlink("support@e-iceblue.com", "support@e-iceblue.com", HyperlinkType.EMailLink);

 

            document.SaveToFile("Hyperlink.docx");

            System.Diagnostics.Process.Start("Hyperlink.docx");

        }

    }

}

f:id:uha_noki:20211014101429p:plain

4. どうやって注釈を追加しますか?

using Spire.Doc;

using Spire.Doc.Documents;

using Spire.Doc.Fields;

namespace word

{

    class Program

    {

        static void Main(string args)

        {

            Document document = new Document();

            Section section = document.AddSection();

 

            Paragraph paragraph = section.AddParagraph();

            paragraph.AppendText("Home Page of ");

            TextRange textRange = paragraph.AppendText("e-iceblue");

 

            Comment comment1 = paragraph.AppendComment("www.e-iceblue.com");

            comment1.AddItem(textRange);

            comment1.Format.Author = "Blue";

            comment1.Format.Initial = "Ice";

 

            document.SaveToFile("Comment.docx");

            System.Diagnostics.Process.Start("Comment.docx");

        }

    }

}

f:id:uha_noki:20211014101446p:plain

5.どうやってブックマークを追加しますか?

using Spire.Doc;

namespace wordBookmark

{

    class Bookmark

    {

            static void Main(string args)

        {

            //ドキュメントをロードします

            Document document = new Document();

            document.LoadFromFile(@"C:\Users\Administrator\Desktop\Workexample.docx");

 

            //ブックマークを挿入します

            Section section = document.Sections[0];

            section.Paragraphs[3].AppendBookmarkStart("Workexample");

            section.Paragraphs[4].AppendBookmarkEnd("Wordexample");

 

            //ドキュメントを保存して起動します

            document.SaveToFile("Bookmark.docx", FileFormat.Docx);

            System.Diagnostics.Process.Start("Bookmark.docx");

        }

    }

}

f:id:uha_noki:20211014101504p:plain

6.メールをマージします

using Spire.Doc;

namespace wordBookmark

{

    class Bookmark

    {

        static void Main(string args)

        {

            Document document = new Document();

            document.LoadFromFile("Fax.docx");

 

            string filedNames = new string { "Contact Name", "Fax", "Date" };

 

            string filedValues = new string { "Nakamura", "+1 (69) 123456", System.DateTime.Now.Date.ToString() };

 

            document.MailMerge.Execute(filedNames, filedValues);

 

            document.SaveToFile("MailMerge.doc", FileFormat.Doc);

            System.Diagnostics.Process.Start("MailMerge.doc");

        }

    }

}

f:id:uha_noki:20211014101524p:plain

7.Wordドキュメントをマージします

using Spire.Doc;

namespace wordBookmark

{

    class Bookmark

    {

        private static object document;

        static void Main(string args)

        {           

            //二つのドキュメントをロードします

            Document DocOne = new Document();

            DocOne.LoadFromFile(@"C:\Users\Administrator\Desktop\WorkTable.docx", FileFormat.Docx);

            Document DocTwo = new Document();

            DocTwo.LoadFromFile(@"C:\Users\Administrator\Desktop\WorkTable2.docx", FileFormat.Docx);

 

            //マージします

            foreach (Section sec in DocTwo.Sections)

            {

                DocOne.Sections.Add(sec.Clone());

            }

            //ドキュメントを保存して起動します

            DocOne.SaveToFile("Merge.docx", FileFormat.Docx);

        }

    }

}

8.ドキュメントを保護します。パスワードを設置するか透かしを追加して保護することができます。透かしにはテキストかまたは画像もサポートされています。

using Spire.Doc;

using Spire.Doc.Documents;

namespace wordBookmark

{

    class Bookmark

    {

        private static object document;

        static void Main(string[] args)

        {

            //パスワードを利用して保護します

            document.Encrypt("eiceblue");

 

            //テキスト透かしを追加します

            TextWatermark txtWatermark = new TextWatermark();

            txtWatermark.Text = "Microsoft";

            txtWatermark.FontSize = 90;

            txtWatermark.Layout = WatermarkLayout.Diagonal;

            document.Watermark = txtWatermark;

 

            //画像透かしを追加します

            PictureWatermark picture = new PictureWatermark();

            picture.Picture = System.Drawing.Image.FromFile(@"..\imagess.jpeg");

            picture.Scaling = 250;

            document.Watermark = picture;

        }

    }

}

9. 変換機能は、Wordドキュメントを扱う場合の最も一般的な操作でしょう。Spire.doc for .NETの無料バージョンを使用すると、変換が非常に簡単になります。同様のコードを3行含める限り、WordをPDF、HTML、画像などの他の一般的に使用される形式に変換できます。

WordをPDFに

document.SaveToFile("Target PDF.PDF", FileFormat.PDF);

Wordを画像に

Image image = document.SaveToImages(0, ImageType.Bitmap);

image.Save("Sample.tiff", ImageFormat.Tiff);

WordをHTMLに

document.SaveToFile("Target HTML.html", FileFormat.Html);

WordDocViewer(""Target HTML.html");

 

結論:

これは本当に無料かつ強力なC#Wordコンポーネントであり、Word automatioなしでもちゃんと作業できます、そしていかなる第三方の機能を含めています。それでは今回の紹介はここまで、お読みいただきありがとうございます!

Excelテーブルの形式を残してWordにコピーする方法

Wordの.DocドキュメントもExcelの.Xlsドキュメントも、日常の仕事には不可欠なファイルとして、人々は毎日それらを使っています。そして、常にExcelの内容をWordに導入するとか、または逆があります。今回はExcelテーブルの形式を残して、Wordにコピーする方法を紹介します。

これを実現するには、Spire.Officeというコンポーネントが必要です。Spire.Officeとは、エンタープライズ級のOfficeコンポーネントであり、Spire.Doc、Spire.XLS、 Spire.Spreadsheet、Spire.Presentation、Spire.PDF、Spire.DataExport、Spire.OfficeViewer、Spire.PDFViewer、Spire.DocViewerとSpire.BarCodeなどのコンポーネントを含まれています。それを使用すると、.NETアプリケーションで、Officeドキュメント、PDFドキュメントの表示、操作、変換、印刷、バーコードの作成、データのインポートとエクスポートなどの作業を行うことができます。ExcelテーブルをWordにコピーするには、Spire.DocとSpire.Xlsが使われます。

まずは、Spire.Officeをダウンロードしてインストールします、それからVisual Studioを開き、新しいプロジェクトを作成して、参照にSpire.Doc.dllとSpire.Xls.dllを追加します。必要とする名前空間は以下のようになります:

using Spire.Doc;

using Spire.Doc.Documents;

using Spire.Doc.Fields;

using Spire.Xls;

そして詳細な手順を紹介します:

ステップ1 システムからExcelドキュメントをロードして1番目のワークシートを取得する

Workbook workbook = new Workbook();

workbook.LoadFromFile("DatatableSample.xlsx");

Worksheet sheet = workbook.Worksheets[0];

ステップ2 新しいWordドキュメントを作成してテーブルを添加し、その行数と列数はExcelのテーブルと一致にする

Document doc = new Document();

//テーブルを添加する

Table table = doc.AddSection().AddTable(true);

//行数と列数を設置する

table.ResetCells(sheet.LastRow, sheet.LastColumn);

ステップ3  ExcelテーブルのデータをWordテーブルに書き込み、カスタムメソッドCopyStyle()を使用して、Excelテーブルの形式をWordテーブルにコピーする

for (int r = 1; r <= sheet.LastRow; r++)

            {

                for (int c = 1; c <= sheet.LastColumn; c++)

                {

                    CellRange xCell = sheet.Range[r, c];

                    TableCell wCell = table.Rows[r - 1].Cells[c - 1];

                    //データをWordテーブルに書き込む

                    TextRange textRange = wCell.AddParagraph().AppendText(xCell.NumberText);

                    //フォーマットをWordテーブルにコピーする

                    CopyStyle(textRange, xCell, wCell);

                }

            }

カスタムメソッドCopyStyle( TextRange wTextRange, CellRangexCell, TableCell wCell)は以下になります:

パラメーター:

wTextRange: Wordテーブルにあるテキスト

xCell: Excelテーブルにあるセル

wCell: Wordテーブルにあるセル

 

private static void CopyStyle(TextRangewTextRange, CellRange xCell, TableCell wCell)

            {

                //フォントのフォーマットをコピーする

                wTextRange.CharacterFormat.TextColor = xCell.Style.Font.Color;

                wTextRange.CharacterFormat.FontSize = (float)xCell.Style.Font.Size;

                wTextRange.CharacterFormat.FontName = xCell.Style.Font.FontName;

                wTextRange.CharacterFormat.Bold = xCell.Style.Font.IsBold;

                wTextRange.CharacterFormat.Italic = xCell.Style.Font.IsItalic;

                //背景の色をコピーする

                wCell.CellFormat.BackColor = xCell.Style.Color;

                //テキストの配置をコピーする

                switch (xCell.HorizontalAlignment)

                {

                    case HorizontalAlignType.Left:

                        wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Left;

                        break;

                    case HorizontalAlignType.Center:

                        wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Center;

                        break;

                    case HorizontalAlignType.Right:

                        wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Right;

                        break;

                }

            }

ステップ4 ドキュメントを保存する

doc.SaveToFile("result.docx", Spire.Doc.FileFormat.Docx);

実行の結果:

f:id:uha_noki:20210929185920p:plain

完全なコードをまとめます:

using Spire.Doc;

using Spire.Doc.Fields;

using Spire.Doc.Documents;

using Spire.Xls;

using System.Drawing;

 

namespace Excelテーブルの形式を残してWordにコピーする

{

    class Program

    {

        static void Main(string[] args)

        {

            //Excelドキュメントをロードする

            Workbook workbook = new Workbook();

            workbook.LoadFromFile("sample.xlsx");

            Worksheet sheet = workbook.Worksheets[0];

            //新しいWordドキュメントを作成する

            Document doc = new Document();

            //テーブルをWordドキュメントに添加する

            Table table = doc.AddSection().AddTable(true);

            //行数と列数を設置する

            table.ResetCells(sheet.LastRow, sheet.LastColumn);

            for (int r = 1; r <= sheet.LastRow; r++)

            {

                for (int c = 1; c <= sheet.LastColumn; c++)

                {

                    CellRange xCell = sheet.Range[r, c];

                    TableCell wCell = table.Rows[r - 1].Cells[c - 1];

                    //データをWordテーブルに書き込む

                    TextRange textRange = wCell.AddParagraph().AppendText(xCell.NumberText);

                    //フォーマットをWordテーブルにコピーする

                    CopyStyle(textRange, xCell, wCell);

                }

            }

            //Wordテーブルの内容に応じて列幅を自動的に調整する

            table.AutoFit(AutoFitBehaviorType.AutoFitToContents);

            //ドキュメントを保存して開く

            doc.SaveToFile("result.docx", Spire.Doc.FileFormat.Docx);

            System.Diagnostics.Process.Start("result.docx");

        }

        private static void CopyStyle(TextRange wTextRange, CellRange xCell, TableCell wCell)

        {

            //Excelセルのフォント形式をWordテーブルにコピーする

            wTextRange.CharacterFormat.TextColor = xCell.Style.Font.Color;

            wTextRange.CharacterFormat.FontSize = (float)xCell.Style.Font.Size;

            wTextRange.CharacterFormat.FontName = xCell.Style.Font.FontName;

            wTextRange.CharacterFormat.Bold = xCell.Style.Font.IsBold;

            wTextRange.CharacterFormat.Italic = xCell.Style.Font.IsItalic;

            //Excelセルの背景色をWordテーブルにコピーする

            wCell.CellFormat.BackColor = xCell.Style.Color;        

            //Excelセルのテキスト配置をWordにコピーする

            switch (xCell.HorizontalAlignment)

            {

                case HorizontalAlignType.Left:

                    wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Left;

                    break;

                case HorizontalAlignType.Center:

                    wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Center;

                    break;

                case HorizontalAlignType.Right:

                    wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Right;

                    break;

            }

        }

    }

}

以上は今回のExcelテーブルの形式を残してWordにコピーする方法でした、お助けになると幸いです、ではまた!

C#でPowerPointのハイパーリンクを追加、修正、削除する方法

今回はC#でPowerPointのスライドにハイパーリンクを追加する方法を紹介します。リンクを追加するには、テキストや画像などを対象にハイパーリンクを追加することができます。リンクの対象については、サイトのページ、メールのアドレスおよび指定されたスライドなどにジャンプできます。その他、この文章で紹介された既にスライドにあったリンクの編集、削除する方法を参照してもいいです。

使用すべきのプログラムクラスライブラリー:Free Spire.Presentation for .NET(無料版)

Dllファイルの取得と参照:

方法1  Free Spire.Presentation for .NETの公式サイトからアーカイブをダウンロードして、解凍したら「Bin」フォルダのプログラムを指定されたパスにインストールします。インストール完了したあと、パスの下の「Bin」フォルダにあるSpire.Presentation.dllファイルをプログラムを参照に追加し、using指令を追加します。

方法2 Nugetを通してインストールする

DLLを参照に追加した効果は以下のようになります:

f:id:uha_noki:20211008164022p:plain

f:id:uha_noki:20211008164039p:plain

C#コード一覧

  • PowerPointスライドにハイパーリンクを追加

using Spire.Presentation;

using Spire.Presentation.Drawing;

using System.Drawing;

 

namespace AddHyperlink

{

    class Program

    {

        static void Main(string args)

        {

            //Presentationインスタンスを初期化する

            Presentation PowerPoint = new Presentation();

 

            //スライドを追加して2番目のスライそにする(ドキュメントを作成するとデフォルトで一つのスライドを作る)

            PowerPoint.Slides.Append();

 

            //1番目のスライドを取得して形状を追加する

            ISlide slide1 = PowerPoint.Slides[0];

            IAutoShape shape = slide1.Shapes.AppendShape(ShapeType.Rectangle, new RectangleF(100, 100, 450, 200));

            shape.Fill.FillType = FillFormatType.Solid;

            shape.Fill.SolidColor.Color = Color.LightYellow;

            shape.ShapeStyle.LineColor.Color = Color.White;

 

            //文字列変数を編集する

            string s1 = "Google";

            string s2 = "は世界最大の捜索エンジンであり、情報と知識を中心としたインターネット統合サービス会社と世界をリードする人工知能プラットフォーム会社です。";

            string s3 = "詳細は2ページの概要を参照してください";

 

            //形状段落を取得(デフォルトでは空白の段落がある)

            TextParagraph paragraph = shape.TextFrame.TextRange.Paragraph;

            paragraph.Alignment = TextAlignmentType.Left;

 

            //文字列s1によりtr1を作成し、文字にWebアドレスに指すリンクを追加する

            TextRange tr1 = new TextRange(s1);

            tr1.ClickAction.Address = "https://www.google.com/";

            //tr1.ClickAction.Address = "123654zz@gmail.com";//メールアドレスに指す

 

            //文字列s2によりtr2を作成する

            TextRange tr2 = new TextRange(s2);

 

            //文字列s3によりtr3を作成し、文字に2番目のスライドに指すリンクを追加する

            TextRange tr3 = new TextRange(s3);

            ClickHyperlink link = new ClickHyperlink(PowerPoint.Slides[1]);

            tr3.ClickAction = link;

 

            //TextRangeを段落に追加する

            paragraph.TextRanges.Append(tr1);

            paragraph.TextRanges.Append(tr2);

            paragraph.TextRanges.Append(tr3);

 

            //段落のフォントを設置する

            foreach (TextRange tr in paragraph.TextRanges)

            {

                tr.LatinFont = new TextFont("Yu Mincho");

                tr.FontHeight = 20f;

                tr.IsBold = TriState.True;

                tr.Fill.FillType = FillFormatType.Solid;

                tr.Fill.SolidColor.Color = Color.Black;

            }

            //2番目のスライドを取得して形状を追加し、そして画像を形状に追加してWebアドレスに指すリンクを設置する

            ISlide slide2 = PowerPoint.Slides[1];

            RectangleF rect = new RectangleF(250, 175, 195, 130);

            IEmbedImage image = slide2.Shapes.AppendEmbedImage(ShapeType.Rectangle, @"tp.png", rect);

            ClickHyperlink hyperlink = new ClickHyperlink("https://www.google.com/");

            image.Click = hyperlink;

 

            //ドキュメントを保存する

            PowerPoint.SaveToFile("AddHyperlink.pptx", FileFormat.Pptx2010);

            System.Diagnostics.Process.Start("AddHyperlink.pptx");

        }

    }

}

スライドショーでハイパーリンクの追加効果を確認できます。

テキストハイパーリンク追加効果:

f:id:uha_noki:20211008164104p:plain

画像ハイパーリンク追加効果:

f:id:uha_noki:20211008164117p:plain

  • PowerPointスライドのハイパーリンクを編集、削除

using Spire.Presentation;

 

namespace ModifyHyperlink

{

    class Program

    {

        static void Main(string args)

        {

            //Presentationインスタンスを初期化する

            Presentation PowerPoint = new Presentation();

 

            //既にあったドキュメントをロードする

            PowerPoint.LoadFromFile("AddHyperlink.pptx");

 

            //1番目のスライドを取得する

            ISlide slide = PowerPoint.Slides[0];

 

            //shapeをトラバーサル

            foreach (IShape shape in slide.Shapes)

            {

                //autoshapeかどうかを判断する

                if (shape is IAutoShape)

                {

                    //shapeをautoshapeに転換する

                    IAutoShape autoShape = shape as IAutoShape;

 

                    //autoshapeのparagraphをトラバーサル

                    foreach (TextParagraph tp in autoShape.TextFrame.Paragraphs)

                    {

                        //paragraphの下はtextrangeの存在を判断する

                        if (tp.TextRanges != null && tp.TextRanges.Count > 0)

                        {

                            //textrangeをトラバーサル

                            for (int tpcount = 0; tpcount < tp.TextRanges.Count; tpcount++)

                            {

                                //テキストの存在及びClickActionとリンクが含んでいるかどうかを判断する

                                if (tp.TextRanges[tpcount].ClickAction != null && !string.IsNullOrWhiteSpace(tp.TextRanges[tpcount].ClickAction.Address) && !string.IsNullOrWhiteSpace(tp.TextRanges[tpcount].Text))

                                {

                                    //http或いはhttpsリンクの存在を判断する

                                    if (tp.TextRanges[tpcount].ClickAction.Address.ToLower().Contains("http") || tp.TextRanges[tpcount].ClickAction.Address.ToLower().Contains("https"))

                                    {

                                        //リンクを再アロケーション

                                        tp.TextRanges[tpcount].ClickAction.Address = "https://ja.wikipedia.org/";

 

                                        //ハイパーリンクテキストを再設置する

                                        tp.TextRanges[tpcount].Text = "ウィキペディア";

 

                                        //ハイパーリンクを削除する

                                        //tp.TextRanges[tpcount].ClickAction = null;

                                    }

                                }

                            }

                        }

                    }

                }

            }

            //ドキュメントを保存する

            PowerPoint.SaveToFile("ModifyHyperlink.pptx", FileFormat.Pptx2010);

            System.Diagnostics.Process.Start("ModifyHyperlink.pptx");

        }

    }

}

ハイパーリンクの修正効果:

f:id:uha_noki:20211008164158p:plain

ハイパーリンクの削除効果:

f:id:uha_noki:20211008164211p:plain

以上は今回のC#でPowerPointのハイパーリンクを追加、修正、削除する方法でございます、お読みいただきありがとうございます!