![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
表題の件について
VB.netのFormにあるイメージを、
Excelに貼り付ける方法をいろいろと試しています。
● VB.net(.netFramework4.8~)
● 商用フリー
● dllの配布は行いたくない(動的参照が可能)
根本的な疑問なのですが
「Excelに画像を貼り付ける」という作業は
何年も前から世界中に実施したい人がいたと(勝手に)思っているのですが
現状こんなにややこしい処理が必要なのが不思議です。。
現状「EPPlus」「ClosedXML」「NPOI」の3つで考えているのですが
(これらも教えていただきましたが)
動作の確認やライセンスの有無の確認を行っていると
何がいいのかわからなくなってきて来ました。。。
ライセンス的には。。。
現状動的参照が。。。。
出力時の縦横比が狂う。。。
画像の貼り付けをシステムで使用している方などは
何を基準に貼り付け方法を決めているのでしょうか。。
実践したことがある方、教えていただけると幸いです。
No.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
ご回答ありがとうございます。
教えていただいた内容なのに、騒いで申し訳ございません…
「EPPlus 4.5.3.3」はシンプルでわかりやすかったです。
ただ、他の2つは明確なライセンス規約があるのですが
「EPPlus」は最新版が有償ということで、
今後使えなくなることも考えてしまい他2つと迷ってしまいました。
3種の方法で貼り付け処理を試したりしていると、
サンプルだけなら「NPOI」「ClosedXML」「EPPlus」はすべて出力できたので
使っている人がどのような基準で選んでいるのか伺ってみたかったのです。。
(naktak様の意見だと「NPOI」はあんまりみたいですね笑)
また別途問題があり、
テンプレートファイル(xltx)を使って画像を出力することになりまして。。。
(当たり前かもしれませんが)
「NPOI」等を使用すると、直接「xltx」に画像を張り付けてしまいます。
現在、ほかの処理と組み合わせ
テンプレートファイルを使ってうまく貼り付けできないか調査中です。
大変わかりやすいサンプルを提示していただき
本当に助かっています。
いつもありがとうございます。
No.1
- 回答日時:
>>現状こんなにややこしい処理が必要なのが不思議です。
。まあ、やろうとしている処理が、基本的にややこしいから、ややこしい処理になるのでしょう。
簡単になったとしても、「ややこしい」ところが消え去るのではありません。単に「ややこしい処理」が下請けにまわされるだけ。
これはプログラムの世界では「複雑さ保存則」なんて言われることがあります。
>>何を基準に貼り付け方法を決めているのでしょうか。。
C#ですけど、貼り付けって、1回くらい使った気がします。
自分の求める機能があって、いちばんシンプルなものを選んだような気がしますが、詳細は忘れました。
コメントありがとうございます。
「Excelに画像を貼る」という機能がもう少し確立しているかと
思っていたので少しとまどってしまいました。
そうですね、誰かがどこかで対応しているのでしょうね。。
もう少し調べてみます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Excel(エクセル) ログインIDの一発入力? 5 2023/07/07 12:30
- Excel(エクセル) Excel 毎日手作業で時間がかかって、泣きたいです、、、VBAのプロの方、助けてください。。。 3 2022/10/25 04:26
- Excel(エクセル) Excelの複数ファイルの複数行を別ファイル1つのシートにVBA、マクロで集約する方法 5 2022/09/13 06:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/04 17:58
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- その他(アニメ・マンガ・特撮) 著作権について アニメのオタ活手帳に貼るために、ワンシーンやキャラクターの立ち絵などを印刷したいです 3 2023/03/07 17:26
- ノートパソコン 古いノートパソコンVostro 3500の電源アダプターについて 3 2022/10/07 13:58
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
[VB.net] ExcelへのQRコード出力処理について
Visual Basic(VBA)
-
VB.NET操作で Excelにビットマップ貼り付け
Visual Basic(VBA)
-
EXCELに貼り付けた画像の位置を変更する方法
Microsoft ASP
-
-
4
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
5
C# Excelファイルへの画像挿入。
その他(プログラミング・Web制作)
-
6
CloseとDisposeの違い
Visual Basic(VBA)
-
7
VB2010でExcelの行をコピーして挿入する
Visual Basic(VBA)
-
8
Pictures.Insertメソッド⇒Shapes.AddPictureメソッドに変更したいです。
Visual Basic(VBA)
-
9
クリップボードの内容をEXCELに貼付け
Visual Basic(VBA)
-
10
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
11
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
-
12
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
13
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
14
C# Excelのsheetに表示された画像を削除したい。
C言語・C++・C#
-
15
VB.NETでマウスクリックイベントを発生させたい。
Visual Basic(VBA)
-
16
VBで、開いているExcelシートのアクティブセルの情報を取得
Visual Basic(VBA)
-
17
VB.NETによるEXCELの行挿入
Visual Basic(VBA)
-
18
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
19
VB BitmapをExcelに貼り付け 大きさ
Visual Basic(VBA)
-
20
VB6 エクセルに画像貼り付け
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのマクロについて教えてく...
-
エクセルVBAコードで教えて下さ...
-
VBAコードについて教えてくださ...
-
vba アクティブシートの名前変...
-
Outlookの「受信日時」「件名」...
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
VBA 別ブックからコピペしたい...
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
VBAの計算で@が出てしまう件
-
エクセルのマクロについて教え...
-
Outlookにて既にウィドウ単体で...
-
ユーザーフォームに別シートか...
-
Excelのマクロについて教えてく...
-
Vba 実数および実数タイプの変...
-
Excelのマクロについて教えてく...
-
久しぶりのプログラミング
-
エクセルVBA
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで大量のファイルをシート名...
-
VBA レジストリの値の読み方に...
-
Excelのマクロについて教えてく...
-
ユーザーフォームに別シートか...
-
VBAの計算で@が出てしまう件
-
エクセルVBAについて
-
Vba 実数および実数タイプの変...
-
【ExcelVBA】値を変更しながら...
-
VBA一覧取得 再投稿
-
VBA指定行削除
-
エクセルVBAについて
-
VBA ユーザーフォーム ボタンク...
-
VBA 何かしら文字が入っていたら
-
エクセルについて
-
2つのマクロでチェックボックス...
-
【マクロ】1つのマクロの中に...
-
ExcelのVBAコードについて教え...
-
VB.net(VB)で、フォームにExcel...
-
Vba SelStart、SelLen教えてく...
-
Excel-VBAのmsgBox()の不思議
おすすめ情報