![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
表題の件について
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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
[VB.net] ExcelへのQRコード出力処理について
Visual Basic(VBA)
-
VB.NET操作で Excelにビットマップ貼り付け
Visual Basic(VBA)
-
EXCELに貼り付けた画像の位置を変更する方法
Microsoft ASP
-
-
4
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
5
クリップボードの内容をEXCELに貼付け
Visual Basic(VBA)
-
6
VBで、開いているExcelシートのアクティブセルの情報を取得
Visual Basic(VBA)
-
7
VB2010でExcelの行をコピーして挿入する
Visual Basic(VBA)
-
8
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
9
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
10
VB.NETでマウスクリックイベントを発生させたい。
Visual Basic(VBA)
-
11
Pictures.Insertメソッド⇒Shapes.AddPictureメソッドに変更したいです。
Visual Basic(VBA)
-
12
C# Excelのsheetに表示された画像を削除したい。
C言語・C++・C#
-
13
VB.NETによるEXCELの行挿入
Visual Basic(VBA)
-
14
CloseとDisposeの違い
Visual Basic(VBA)
-
15
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
16
VB BitmapをExcelに貼り付け 大きさ
Visual Basic(VBA)
-
17
C# Excelファイルへの画像挿入。
その他(プログラミング・Web制作)
-
18
VB6 エクセルに画像貼り付け
Visual Basic(VBA)
-
19
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
20
.NET上でエクセル上に罫線を引く
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
[VB.net] ボタン(Flat)のEnable...
-
VBAコードについて教えてくださ...
-
[vb.net] 起動したFrom2を閉じ...
-
重複確認
-
ExcelVBA修正のお願い
-
マクロの記録を使用したマクロ...
-
{ CONTROL Forms.Label.1}が...
-
エクセルのVBAコードについて教...
-
VBの色を変えるにはどうしたら...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA 別ブックから条件に合うも...
-
配列のペースト出力結果の書式...
-
VBA 別ブックからコピペしたい...
-
A列B列どちらにもあるのを抽...
-
Excelに保存されているユーザー...
-
VBAコンボボックスで選択した値...
-
Excel(M365) Vlookup/セル反転(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAなくなるの?
-
VBAでCOPYを繰り返すと、処理が...
-
vba 削除
-
プログラミング
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
エクセルのVBAコードについて教...
-
久しぶりのプログラミング
-
ユーザーフォームに別シートか...
-
エクセルVBAコードで教えて下さ...
-
VBA 別ブックからコピペしたい...
-
ExcelのVBAコードについて教え...
-
VBAコードについて教えてくださ...
-
vba アクティブシートの名前変...
-
Excelのマクロについて教えてく...
-
エクセルVBA
-
Geogebraの操作方法について
-
マクロの記録を使用したマクロ...
-
Excel(M365) Vlookup/セル反転(...
-
Excel 範囲指定スクショについ...
おすすめ情報