dポイントプレゼントキャンペーン実施中!

表題の件について

VB.netのFormにあるイメージを、
Excelに貼り付ける方法をいろいろと試しています。

● VB.net(.netFramework4.8~)
● 商用フリー
● dllの配布は行いたくない(動的参照が可能)


根本的な疑問なのですが
「Excelに画像を貼り付ける」という作業は
何年も前から世界中に実施したい人がいたと(勝手に)思っているのですが
現状こんなにややこしい処理が必要なのが不思議です。。



現状「EPPlus」「ClosedXML」「NPOI」の3つで考えているのですが
(これらも教えていただきましたが)

動作の確認やライセンスの有無の確認を行っていると
何がいいのかわからなくなってきて来ました。。。

ライセンス的には。。。
現状動的参照が。。。。
出力時の縦横比が狂う。。。


画像の貼り付けをシステムで使用している方などは
何を基準に貼り付け方法を決めているのでしょうか。。

実践したことがある方、教えていただけると幸いです。

A 回答 (2件)

何をどう困っているのか分かりませんが、EPPlus 4.5.3.3、ZXing.Net 0.16.6でこんなレベルで出来ますが、複雑ですか?



BitmapオブジェクトをバイナリとしてそのままExcelへ画像追加すればいいので、生成したQRコードをわざわざファイル保存する必要もありません。
つまり、Formにあるイメージだとしても、それをそのオブジェクトデータのままExcelに流せばいいです。

NPOIとかだと縦横比がうまいこといかずハマっちゃいますね。

Imports System.IO
Imports OfficeOpenXml
Imports ZXing
Imports ZXing.Common

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' QRコードを生成
Dim qrCode As Bitmap = Me.CreateQrCode("これはテスト")
'PictureBox1.Image = qrCode ' 画面に表示したい場合

' Excelファイル作成
Dim filePath As String = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "test.xlsx")
Using excel As New ExcelPackage()
Dim sheet As ExcelWorksheet = excel.Workbook.Worksheets.Add("MySheet")
Dim image = sheet.Drawings.AddPicture("QrCode", qrCode)
'Dim image = sheet.Drawings.AddPicture("QrCode", PictureBox1.Image) ' 画面のPictureBoxのイメージに設定されているオブジェクトを書き出したい場合
image.SetPosition(1, 0, 1, 0)

excel.File = New FileInfo(filePath)
excel.Save()
End Using
End Sub

Private Function CreateQrCode(value As String) As Bitmap
Dim bw As New BarcodeWriter() With {
.Format = BarcodeFormat.QR_CODE,
.Options = New EncodingOptions() With {
.Width = 300,
.Height = 300,
.Margin = 0
}
}
bw.Options.Hints(EncodeHintType.CHARACTER_SET) = "UTF-8"
bw.Options.Hints(EncodeHintType.ERROR_CORRECTION) = QrCode.Internal.ErrorCorrectionLevel.L

Return bw.Write(value)
End Function
End Class
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

教えていただいた内容なのに、騒いで申し訳ございません…

「EPPlus 4.5.3.3」はシンプルでわかりやすかったです。

ただ、他の2つは明確なライセンス規約があるのですが
「EPPlus」は最新版が有償ということで、
今後使えなくなることも考えてしまい他2つと迷ってしまいました。

3種の方法で貼り付け処理を試したりしていると、
サンプルだけなら「NPOI」「ClosedXML」「EPPlus」はすべて出力できたので
使っている人がどのような基準で選んでいるのか伺ってみたかったのです。。
(naktak様の意見だと「NPOI」はあんまりみたいですね笑)


また別途問題があり、
テンプレートファイル(xltx)を使って画像を出力することになりまして。。。

(当たり前かもしれませんが)
「NPOI」等を使用すると、直接「xltx」に画像を張り付けてしまいます。

現在、ほかの処理と組み合わせ
テンプレートファイルを使ってうまく貼り付けできないか調査中です。

大変わかりやすいサンプルを提示していただき
本当に助かっています。

いつもありがとうございます。

お礼日時:2021/01/12 22:03

>>現状こんなにややこしい処理が必要なのが不思議です。



まあ、やろうとしている処理が、基本的にややこしいから、ややこしい処理になるのでしょう。
簡単になったとしても、「ややこしい」ところが消え去るのではありません。単に「ややこしい処理」が下請けにまわされるだけ。
これはプログラムの世界では「複雑さ保存則」なんて言われることがあります。

>>何を基準に貼り付け方法を決めているのでしょうか。。

C#ですけど、貼り付けって、1回くらい使った気がします。
自分の求める機能があって、いちばんシンプルなものを選んだような気がしますが、詳細は忘れました。
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

「Excelに画像を貼る」という機能がもう少し確立しているかと
思っていたので少しとまどってしまいました。

そうですね、誰かがどこかで対応しているのでしょうね。。
もう少し調べてみます。

ありがとうございます。

お礼日時:2021/01/06 20:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A