.docx 形式のファイルが約 400 個あり、それぞれの長さを #pages で判断する必要があります。
そのため、ドキュメントを含むフォルダーを選択するための C# コードを記述し、各 .docx ファイルの #pages を返したいと考えています。
これを行う方法を説明するために、.NET 4.5 といくつかの Microsoft Office 2013 COM オブジェクトに基づいて C# コンソール アプリケーションを作成しました。
using System;
using Microsoft.Office.Interop.Word;
namespace WordDocStats
{
class Program
{
// Based on: http://www.dotnetperls.com/word
static void Main(string[] args)
{
// Open a doc file.
var application = new Application();
var document = application.Documents.Open(@"C:\Users\MyName\Documents\word.docx");
// Get the page count.
var numberOfPages = document.ComputeStatistics(WdStatistic.wdStatisticPages, false);
// Print out the result.
Console.WriteLine(String.Format("Total number of pages in document: {0}", numberOfPages));
// Close word.
application.Quit();
}
}
}
これが機能するには、次の COM オブジェクトを参照する必要があります。
2 つの COM オブジェクトにより、必要な名前空間にアクセスできます。
正しいアセンブリを参照する方法の詳細については、「3. 作業環境の設定:」セクションを参照してください: http://www.c-sharpcorner.com/UploadFile/amrish_deep/WordAutomation05102007223934PM/WordAutomation.aspx
C# による Word オートメーションの簡単で一般的な概要については、http: //www.dotnetperls.com/wordを参照してください。
- アップデート
Document.ComputeStatistics
ページ数にアクセスできる方法に関するドキュメントは、 http: //msdn.microsoft.com/en-us/library/microsoft.office.tools.word.document.computestatistics.aspxにあります。
ドキュメントに見られるように、このメソッドは、WdStatistic
さまざまな種類の統計 (ページの合計量など) を取得できる列挙型を取ります。アクセスできる統計の全範囲の概要については、http://msdn.microsoft.com/en-us/library/microsoft.office.interop にある列挙型のドキュメントを参照してくださいWdStatistic
。.word.wdstatistic.aspx
C:\Program Files\Open XML SDK\V2.0\lib で dll を見つけることができる DocumentFormat.OpenXml.dll を使用します。
サンプルコード:
DocumentFormat.OpenXml.Packaging.WordprocessingDocument doc = DocumentFormat.OpenXml.Packaging.WordprocessingDocument.Open(docxPath, false);
MessageBox.Show(doc.ExtendedFilePropertiesPart.Properties.Pages.InnerText.ToString());
DocumentFormat.OpenXml.Packaging.WordprocessingDocument クラスを使用するには、プロジェクトに次の参照を追加する必要があります
DocumentFormat.OpenXml.dll & Windowsbase.dll
Spire.Docのページ数は無料です:)
using Spire.Doc;
public sealed class TestNcWorker
{
[TestMethod]
public void DocTemplate3851PageCount()
{
var docTemplate3851 = Resource.DocTemplate3851;
using (var ms = new MemoryStream())
{
ms.Write(docTemplate3851, 0, docTemplate3851.Length);
Document document = new Document();
document.LoadFromStream(ms, FileFormat.Docx);
Assert.AreEqual(2,document.PageCount);
}
var barCoder = new BarcodeAttacher("8429053", "1319123", "HR3514");
var barcoded = barCoder.AttachBarcode(docTemplate3851).Value;
using (var ms = new MemoryStream())
{
ms.Write(barcoded, 0, barcoded.Length);
Document document = new Document();
document.LoadFromStream(ms, FileFormat.Docx);
Assert.AreEqual( 3, document.PageCount);
}
}
}