作成日: 2018/03/16 最終更新日: 2018/03/16
文書種別
使用方法
詳細
ComponentOne Studio for WinForms収録の1種類のコンポーネントだけで、ExcelファイルをPDFへ変換することはできません。
ただし、本製品収録のいくつかのコンポーネントを組み合わせることで、この変換を行うことができます。
ここでは、Excel for .NETとFlexReport for .NETを使用してPDFファイルへ変換を行う方法をご紹介します。
Excel for .NETで既存Excelファイルの読み込みを行い、そのデータをDataTableなどの形式に変換します。
FlexReport for WinFormsで、これをデータソースとして使用し、レポート化した上でPDFファイルに出力します。
実際の手順は、以下のようになります。
1. C1FlexReportのレポートデザイナを起動し、テンプレートとなるレポート※を作成します。
※読み込むExcelファイルの列数と同じ数のフィールドを、詳細セクションに配置します。
※既存Excelに画像が存在する場合、それに対応するImageFieldも貼り付けておきます。
2. 新規プロジェクトのフォーム上に、C1FlexGridコントロールを追加します。
3. C1XLBookのLoadメソッドで既存Excelファイルをロードします。
4. C1XLBookの行データをDataTableのDataRowに設定します。
5. C1XLBookのシート上の画像をXLPictureShapeオブジェクトとして保存します。
6. フォーム上にC1FlexReportコントロールを貼り付け、ここにステップ1のレポートを読み込みます。
7. C1FlexReportのデータソースとして、ステップ4のDataTableを設定します。
※これにより、Excelファイルのコンテンツをデータに持つグリッド形式レポートが生成されます。
8. C1FlexReportのImageFieldのPictureプロパティに、ステップ5の画像を設定します。
9. エクスポートフィルタとして「PdfFilter」を用いて、C1FlexReportをPDFファイルにエクスポートします。
※下記サンプルコードでは、既存Excelファイルが以下のような内容になっていると仮定しています。
1行目 2行目 3行目
------------------------------------
1 AAAA 任意の画像
2 BBBB
3 CCCC
4 DDDD
------------------------------------
◎サンプルコード(VB)
◎サンプルコード(C#)
※ご注意
1) C1XLBookのLoadメソッドで既存のExcelファイルをロードするとき、オートシェイプやグラフなど、保持されない設定があります。詳細は、以下のナレッジ:80534を参照してください。
2) PDFへ出力する際、各コンテンツの描画位置、フォントサイズやスタイル、グリッドの枠線など、すべて手動で設定する必要があります。
ただし、本製品収録のいくつかのコンポーネントを組み合わせることで、この変換を行うことができます。
ここでは、Excel for .NETとFlexReport for .NETを使用してPDFファイルへ変換を行う方法をご紹介します。
Excel for .NETで既存Excelファイルの読み込みを行い、そのデータをDataTableなどの形式に変換します。
FlexReport for WinFormsで、これをデータソースとして使用し、レポート化した上でPDFファイルに出力します。
実際の手順は、以下のようになります。
1. C1FlexReportのレポートデザイナを起動し、テンプレートとなるレポート※を作成します。
※読み込むExcelファイルの列数と同じ数のフィールドを、詳細セクションに配置します。
※既存Excelに画像が存在する場合、それに対応するImageFieldも貼り付けておきます。
2. 新規プロジェクトのフォーム上に、C1FlexGridコントロールを追加します。
3. C1XLBookのLoadメソッドで既存Excelファイルをロードします。
4. C1XLBookの行データをDataTableのDataRowに設定します。
5. C1XLBookのシート上の画像をXLPictureShapeオブジェクトとして保存します。
6. フォーム上にC1FlexReportコントロールを貼り付け、ここにステップ1のレポートを読み込みます。
7. C1FlexReportのデータソースとして、ステップ4のDataTableを設定します。
※これにより、Excelファイルのコンテンツをデータに持つグリッド形式レポートが生成されます。
8. C1FlexReportのImageFieldのPictureプロパティに、ステップ5の画像を設定します。
9. エクスポートフィルタとして「PdfFilter」を用いて、C1FlexReportをPDFファイルにエクスポートします。
※下記サンプルコードでは、既存Excelファイルが以下のような内容になっていると仮定しています。
1行目 2行目 3行目
------------------------------------
1 AAAA 任意の画像
2 BBBB
3 CCCC
4 DDDD
------------------------------------
◎サンプルコード(VB)
Private ds As New DataSet()
Private dt As New DataTable()
ds.Tables.Add(dt)
dt.Columns.Add("Serial Number")
dt.Columns.Add("Name")
c1XLBook1.Load("..¥..¥TestBook.xlsx")
Dim sheet As XLSheet = c1XLBook1.Sheets(0)
For r As Integer = 0 To c1XLBook1.Sheets(0).Rows.Count - 1
Dim dr As DataRow = dt.NewRow()
dr(0) = sheet(r, 0).Value
dr(1) = sheet(r, 1).Value
dt.Rows.Add(dr)
Next
c1FlexReport1.Load("..¥..¥Report1.flxr", "Report 1")
c1FlexReport1.DataSource.Recordset = ds.Tables(0)
Dim img As New ImageField()
img = DirectCast(c1FlexReport1.Fields("Field2"), ImageField)
Dim shap1 As XLPictureShape = DirectCast(sheet.Shapes(0), XLPictureShape)
img.Picture = shap1.Image
Dim filter As New C1.Win.C1Document.Export.PdfFilter()
filter.FileName = "..¥..¥ExcelToPdf.pdf"
c1FlexReport1.Export(filter)
System.Diagnostics.Process.Start("..¥..¥ExcelToPdf.pdf")
Private dt As New DataTable()
ds.Tables.Add(dt)
dt.Columns.Add("Serial Number")
dt.Columns.Add("Name")
c1XLBook1.Load("..¥..¥TestBook.xlsx")
Dim sheet As XLSheet = c1XLBook1.Sheets(0)
For r As Integer = 0 To c1XLBook1.Sheets(0).Rows.Count - 1
Dim dr As DataRow = dt.NewRow()
dr(0) = sheet(r, 0).Value
dr(1) = sheet(r, 1).Value
dt.Rows.Add(dr)
Next
c1FlexReport1.Load("..¥..¥Report1.flxr", "Report 1")
c1FlexReport1.DataSource.Recordset = ds.Tables(0)
Dim img As New ImageField()
img = DirectCast(c1FlexReport1.Fields("Field2"), ImageField)
Dim shap1 As XLPictureShape = DirectCast(sheet.Shapes(0), XLPictureShape)
img.Picture = shap1.Image
Dim filter As New C1.Win.C1Document.Export.PdfFilter()
filter.FileName = "..¥..¥ExcelToPdf.pdf"
c1FlexReport1.Export(filter)
System.Diagnostics.Process.Start("..¥..¥ExcelToPdf.pdf")
◎サンプルコード(C#)
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
dt.Columns.Add("Serial Number");
dt.Columns.Add("Name");
c1XLBook1.Load(@"..¥..¥TestBook.xlsx");
XLSheet sheet = c1XLBook1.Sheets[0];
for (int r = 0; r < c1XLBook1.Sheets[0].Rows.Count; r++)
{
DataRow dr = dt.NewRow();
dr[0] = sheet[r,0].Value;
dr[1] = sheet[r,1].Value;
dt.Rows.Add(dr);
}
c1FlexReport1.Load(@"..¥..¥Report1.flxr", "Report 1");
c1FlexReport1.DataSource.Recordset = ds.Tables[0];
ImageField img = new ImageField();
img = (ImageField)c1FlexReport1.Fields["Field2"];
XLPictureShape shap1 = (XLPictureShape)sheet.Shapes[0];
img.Picture = shap1.Image;
C1.Win.C1Document.Export.PdfFilter filter = new C1.Win.C1Document.Export.PdfFilter();
filter.FileName = @"..¥..¥ExcelToPdf3.pdf";
c1FlexReport1.Export(filter);
System.Diagnostics.Process.Start(@"..¥..¥ExcelToPdf3.pdf");
DataTable dt = new DataTable();
ds.Tables.Add(dt);
dt.Columns.Add("Serial Number");
dt.Columns.Add("Name");
c1XLBook1.Load(@"..¥..¥TestBook.xlsx");
XLSheet sheet = c1XLBook1.Sheets[0];
for (int r = 0; r < c1XLBook1.Sheets[0].Rows.Count; r++)
{
DataRow dr = dt.NewRow();
dr[0] = sheet[r,0].Value;
dr[1] = sheet[r,1].Value;
dt.Rows.Add(dr);
}
c1FlexReport1.Load(@"..¥..¥Report1.flxr", "Report 1");
c1FlexReport1.DataSource.Recordset = ds.Tables[0];
ImageField img = new ImageField();
img = (ImageField)c1FlexReport1.Fields["Field2"];
XLPictureShape shap1 = (XLPictureShape)sheet.Shapes[0];
img.Picture = shap1.Image;
C1.Win.C1Document.Export.PdfFilter filter = new C1.Win.C1Document.Export.PdfFilter();
filter.FileName = @"..¥..¥ExcelToPdf3.pdf";
c1FlexReport1.Export(filter);
System.Diagnostics.Process.Start(@"..¥..¥ExcelToPdf3.pdf");
※ご注意
1) C1XLBookのLoadメソッドで既存のExcelファイルをロードするとき、オートシェイプやグラフなど、保持されない設定があります。詳細は、以下のナレッジ:80534を参照してください。
2) PDFへ出力する際、各コンテンツの描画位置、フォントサイズやスタイル、グリッドの枠線など、すべて手動で設定する必要があります。
関連情報
旧文書番号
82583