
表題の件について
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)
-
Pictures.Insertメソッド⇒Shapes.AddPictureメソッドに変更したいです。
Visual Basic(VBA)
-
VB.NET操作で Excelにビットマップ貼り付け
Visual Basic(VBA)
-
-
4
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
5
クリップボードの内容をEXCELに貼付け
Visual Basic(VBA)
-
6
DataViewで複数条件のフィルタのやり方
Visual Basic(VBA)
-
7
POIでのテキストボックス作成について
Java
-
8
vb.netで画面のコントロールId名を変数で動的に制御し処理する方法
Visual Basic(VBA)
-
9
EXCELに貼り付けた画像の位置を変更する方法
Microsoft ASP
-
10
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
11
CloseとDisposeの違い
Visual Basic(VBA)
-
12
VB.NETで1→A、2→B、26→Z、27→AAの変換をしたい
Visual Basic(VBA)
-
13
Flexgridで選択行の列の値を取得したい
Visual Basic(VBA)
-
14
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
15
datetime型でNULL値を入れたい。
SQL Server
-
16
VB.NETからVBAマクロ(引数)を呼び出す方法
Visual Basic(VBA)
-
17
VB.net 引数で配列変数を渡す際の要素数
Visual Basic(VBA)
-
18
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
19
[VB.net] DataGridViewの列ヘッダー複数行表示に伴う不具合?について
Visual Basic(VBA)
-
20
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
2つのマクロでチェックボックス...
-
vbsでのwebフォームへの入力制限?
-
VBAでユーザーフォームを指定回...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
Vba セルの4辺について罫線が有...
-
【マクロ】並び替えの範囲が、...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
【マクロ】開いているブックの...
-
ワードの図形にマクロを登録で...
-
Excelマクロで使うVBAコードを...
-
(EXCEL超初心者)EXCELの関数(ま...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報