作成日: 2018/03/16 最終更新日: 2018/03/16
文書種別
使用方法
詳細
ComponentOne Studio for WinForms収録の1種類のコンポーネントだけで、ExcelファイルをPDFへ変換することはできません。
ただし、本製品収録のいくつかのコンポーネントを組み合わせることで、この変換を行うことができます。
ここでは、FlexGrid for WinFormsとPDF for .NETを主に使用してPDFファイルへ変換を行う方法をご紹介します。
■文字列のみを含むExcelファイルの場合
この場合は、C1FlexGridのLoadExcelメソッドでロードしたExcelファイルの文字列がそのままグリッドに設定されます。
この状態で、枠線を含む画面上のグリッドイメージ全体をページイメージとして生成し、PDFファイルとして保存します。
画面上の外観がそのままPDF化されるため、レイアウト等について細かく制御することが多少難しいことにご留意ください。
実際の手順は、以下のようになります。
1. 新規プロジェクトのフォーム上に、C1FlexGridコントロールを追加します。
2. C1FlexGridのLoadExcelメソッドで既存Excelファイルをロードします。
3. C1FlexGridのCreateImageメソッドで、ロードされたExcelのコンテンツとグリッド線の画像を生成します。
4. フォーム上にC1PdfDocumentコントロールを貼り付けます。
5. C1PdfDocumentのDrawImageメソッドで、ステップ3の画像を描画します。
6. C1PdfDocumentのSaveメソッドで、これをPDFファイルとして保存します。
※下記サンプルコードでは、既存Excelファイルが以下のような内容になっていると仮定しています。
1行目 2行目
---------------------
1 AAAA
2 BBBB
3 CCCC
4 DDDD
---------------------
◎サンプルコード(VB)
◎サンプルコード(C#)
■画像を含むExcelファイルの場合
前項で使用したC1FlexGridのLoadExcelメソッドでは、仕様上、Excelファイル内の画像はロードされません。
画像も含めてExcelファイルをロードする場合は、Excel for .NETを併用します。
C1XLBookのLoadメソッドではテキストと共に画像もロードされます。この中の画像を取り出してグリッドに追加することで、Excelファイルのテキストと画像を、グリッドとして簡単に画面に表示できます。
実際の手順は、以下のようになります。
1. 新規プロジェクトのフォーム上に、C1FlexGridコントロールを追加します。
2. C1FlexGridのLoadExcelメソッドで既存Excelファイルをロードします。
3. C1XLBookのLoadメソッドで既存Excelファイルをロードします。
4. C1XLBookのシート上の画像をXLPictureShapeオブジェクトとして保存します。
5. C1FlexGridのSetCellImageメソッドで、この画像をグリッドの任意のセルに追加します。
6. C1FlexGridのCreateImageメソッドで、ロードされたExcelのコンテンツ全体とグリッド線の画像を生成します。
7. フォーム上にC1PdfDocumentコントロールを貼り付けます。
8. C1PdfDocumentのDrawImageメソッドで、ステップ6の画像を描画します。
9. C1PdfDocumentのSaveメソッドで、これをPDFファイルとして保存します。
※下記サンプルコードでは、既存Excelファイルが以下のような内容になっていると仮定しています。
1行目 2行目 3行目
------------------------------------
1 AAAA 任意の画像
2 BBBB
3 CCCC
4 DDDD
------------------------------------
◎サンプルコード(VB)
◎サンプルコード(C#)
※ご注意
1) C1Studio 2017Jv3以降でC1FlexGridのLoadExcel(LoadGridも同様)を使用するには、プロジェクトにC1.Win.C1FlexGrid.ImportExportの参照を追加し、明示的にImportsステートメント(C#ではusingステートメント)を記述する必要があります。詳細は、ナレッジ:82480 を参照してください。
2) Excelファイル内のマージ状態を保持したままロードするには、FileFlagsオプションの「SaveMergedRanges」を指定して、C1FlexGrid1.LoadExcelを実行します。詳細は、ナレッジ:81872 を参照してください。
ただし、本製品収録のいくつかのコンポーネントを組み合わせることで、この変換を行うことができます。
ここでは、FlexGrid for WinFormsとPDF for .NETを主に使用してPDFファイルへ変換を行う方法をご紹介します。
■文字列のみを含むExcelファイルの場合
この場合は、C1FlexGridのLoadExcelメソッドでロードしたExcelファイルの文字列がそのままグリッドに設定されます。
この状態で、枠線を含む画面上のグリッドイメージ全体をページイメージとして生成し、PDFファイルとして保存します。
画面上の外観がそのままPDF化されるため、レイアウト等について細かく制御することが多少難しいことにご留意ください。
実際の手順は、以下のようになります。
1. 新規プロジェクトのフォーム上に、C1FlexGridコントロールを追加します。
2. C1FlexGridのLoadExcelメソッドで既存Excelファイルをロードします。
3. C1FlexGridのCreateImageメソッドで、ロードされたExcelのコンテンツとグリッド線の画像を生成します。
4. フォーム上にC1PdfDocumentコントロールを貼り付けます。
5. C1PdfDocumentのDrawImageメソッドで、ステップ3の画像を描画します。
6. C1PdfDocumentのSaveメソッドで、これをPDFファイルとして保存します。
※下記サンプルコードでは、既存Excelファイルが以下のような内容になっていると仮定しています。
1行目 2行目
---------------------
1 AAAA
2 BBBB
3 CCCC
4 DDDD
---------------------
◎サンプルコード(VB)
C1FlexGrid1.LoadExcel("..¥..¥TestBook.xlsx", "Sheet1", FileFlags.IncludeMergedRanges)
Dim gridImage As Image = C1FlexGrid1.CreateImage()
Dim document As New C1PdfDocument()
document.DrawImage(gridImage, New RectangleF(100, 100, 600, 300))
document.Save("..¥..¥ExcelToPdf1A.pdf")
System.Diagnostics.Process.Start("..¥..¥ExcelToPdf1A.pdf")
Dim gridImage As Image = C1FlexGrid1.CreateImage()
Dim document As New C1PdfDocument()
document.DrawImage(gridImage, New RectangleF(100, 100, 600, 300))
document.Save("..¥..¥ExcelToPdf1A.pdf")
System.Diagnostics.Process.Start("..¥..¥ExcelToPdf1A.pdf")
◎サンプルコード(C#)
c1FlexGrid1.LoadExcel(@"..¥..¥TestBook.xlsx", "Sheet1", FileFlags.IncludeMergedRanges);
Image gridImage = c1FlexGrid1.CreateImage();
C1PdfDocument document = new C1PdfDocument();
document.DrawImage(gridImage, new RectangleF(100, 100, 600, 300));
document.Save(@"..¥..¥ExcelToPdf1A.pdf");
System.Diagnostics.Process.Start(@"..¥..¥ExcelToPdf1A.pdf");
Image gridImage = c1FlexGrid1.CreateImage();
C1PdfDocument document = new C1PdfDocument();
document.DrawImage(gridImage, new RectangleF(100, 100, 600, 300));
document.Save(@"..¥..¥ExcelToPdf1A.pdf");
System.Diagnostics.Process.Start(@"..¥..¥ExcelToPdf1A.pdf");
■画像を含むExcelファイルの場合
前項で使用したC1FlexGridのLoadExcelメソッドでは、仕様上、Excelファイル内の画像はロードされません。
画像も含めてExcelファイルをロードする場合は、Excel for .NETを併用します。
C1XLBookのLoadメソッドではテキストと共に画像もロードされます。この中の画像を取り出してグリッドに追加することで、Excelファイルのテキストと画像を、グリッドとして簡単に画面に表示できます。
実際の手順は、以下のようになります。
1. 新規プロジェクトのフォーム上に、C1FlexGridコントロールを追加します。
2. C1FlexGridのLoadExcelメソッドで既存Excelファイルをロードします。
3. C1XLBookのLoadメソッドで既存Excelファイルをロードします。
4. C1XLBookのシート上の画像をXLPictureShapeオブジェクトとして保存します。
5. C1FlexGridのSetCellImageメソッドで、この画像をグリッドの任意のセルに追加します。
6. C1FlexGridのCreateImageメソッドで、ロードされたExcelのコンテンツ全体とグリッド線の画像を生成します。
7. フォーム上にC1PdfDocumentコントロールを貼り付けます。
8. C1PdfDocumentのDrawImageメソッドで、ステップ6の画像を描画します。
9. C1PdfDocumentのSaveメソッドで、これをPDFファイルとして保存します。
※下記サンプルコードでは、既存Excelファイルが以下のような内容になっていると仮定しています。
1行目 2行目 3行目
------------------------------------
1 AAAA 任意の画像
2 BBBB
3 CCCC
4 DDDD
------------------------------------
◎サンプルコード(VB)
C1FlexGrid1.LoadExcel("..¥..¥TestBook.xlsx", "Sheet1",
FileFlags.IncludeMergedRanges)
C1XLBook1.Load("..¥..¥TestBook.xlsx")
Dim sheet As XLSheet = C1XLBook1.Sheets(0)
Dim shap1 As XLPictureShape = DirectCast(sheet.Shapes(0), XLPictureShape)
C1FlexGrid1.Cols.Count = sheet.Columns.Count + 1
C1FlexGrid1.Rows.Count = sheet.Rows.Count + 1
C1FlexGrid1.SetCellImage(2, sheet.Columns.Count, shap1.Image)
C1FlexGrid1.Cols(sheet.Columns.Count).ImageAlign = ImageAlignEnum.Scale
C1FlexGrid1.Cols(sheet.Columns.Count).Width = 100
Dim gridImage As Image = C1FlexGrid1.CreateImage()
Dim document As New C1PdfDocument()
document.DrawImage(gridImage, New RectangleF(100, 100, 600, 300))
document.Save("..¥..¥ExcelToPdf1B.pdf")
System.Diagnostics.Process.Start("..¥..¥ExcelToPdf1B.pdf")
FileFlags.IncludeMergedRanges)
C1XLBook1.Load("..¥..¥TestBook.xlsx")
Dim sheet As XLSheet = C1XLBook1.Sheets(0)
Dim shap1 As XLPictureShape = DirectCast(sheet.Shapes(0), XLPictureShape)
C1FlexGrid1.Cols.Count = sheet.Columns.Count + 1
C1FlexGrid1.Rows.Count = sheet.Rows.Count + 1
C1FlexGrid1.SetCellImage(2, sheet.Columns.Count, shap1.Image)
C1FlexGrid1.Cols(sheet.Columns.Count).ImageAlign = ImageAlignEnum.Scale
C1FlexGrid1.Cols(sheet.Columns.Count).Width = 100
Dim gridImage As Image = C1FlexGrid1.CreateImage()
Dim document As New C1PdfDocument()
document.DrawImage(gridImage, New RectangleF(100, 100, 600, 300))
document.Save("..¥..¥ExcelToPdf1B.pdf")
System.Diagnostics.Process.Start("..¥..¥ExcelToPdf1B.pdf")
◎サンプルコード(C#)
c1FlexGrid1.LoadExcel(@"..¥..¥TestBook.xlsx", "Sheet1",
FileFlags.IncludeMergedRanges);
c1XLBook1.Load(@"..¥..¥TestBook.xlsx");
XLSheet sheet = c1XLBook1.Sheets[0];
XLPictureShape shap1 = (XLPictureShape)sheet.Shapes[0];
c1FlexGrid1.Cols.Count = sheet.Columns.Count + 1;
c1FlexGrid1.Rows.Count = sheet.Rows.Count + 1;
c1FlexGrid1.SetCellImage(2, sheet.Columns.Count, shap1.Image);
c1FlexGrid1.Cols[sheet.Columns.Count].ImageAlign = ImageAlignEnum.Scale;
c1FlexGrid1.Cols[sheet.Columns.Count].Width = 100;
Image gridImage = c1FlexGrid1.CreateImage();
C1PdfDocument document = new C1PdfDocument();
document.DrawImage(gridImage, new RectangleF(100, 100, 600, 300));
document.Save(@"..¥..¥ExcelToPdf1B.pdf");
System.Diagnostics.Process.Start(@"..¥..¥ExcelToPdf1B.pdf");
FileFlags.IncludeMergedRanges);
c1XLBook1.Load(@"..¥..¥TestBook.xlsx");
XLSheet sheet = c1XLBook1.Sheets[0];
XLPictureShape shap1 = (XLPictureShape)sheet.Shapes[0];
c1FlexGrid1.Cols.Count = sheet.Columns.Count + 1;
c1FlexGrid1.Rows.Count = sheet.Rows.Count + 1;
c1FlexGrid1.SetCellImage(2, sheet.Columns.Count, shap1.Image);
c1FlexGrid1.Cols[sheet.Columns.Count].ImageAlign = ImageAlignEnum.Scale;
c1FlexGrid1.Cols[sheet.Columns.Count].Width = 100;
Image gridImage = c1FlexGrid1.CreateImage();
C1PdfDocument document = new C1PdfDocument();
document.DrawImage(gridImage, new RectangleF(100, 100, 600, 300));
document.Save(@"..¥..¥ExcelToPdf1B.pdf");
System.Diagnostics.Process.Start(@"..¥..¥ExcelToPdf1B.pdf");
※ご注意
1) C1Studio 2017Jv3以降でC1FlexGridのLoadExcel(LoadGridも同様)を使用するには、プロジェクトにC1.Win.C1FlexGrid.ImportExportの参照を追加し、明示的にImportsステートメント(C#ではusingステートメント)を記述する必要があります。詳細は、ナレッジ:82480 を参照してください。
2) Excelファイル内のマージ状態を保持したままロードするには、FileFlagsオプションの「SaveMergedRanges」を指定して、C1FlexGrid1.LoadExcelを実行します。詳細は、ナレッジ:81872 を参照してください。
関連情報
旧文書番号
82581