728x90
첫 번째, C#으로 Excel Export 기능을 구현합니다.
두 번째, Excel 시트의 원하는 셀 위치에 이미지를 삽입합니다.
이미지를 삽입하는 방법은 Pictures.Insert, Shapes.AddPicture 등의 다른 방법도 있지만 제일 간단하고, 내가 원하는 기능(지정한 위치)이 제대로 구현되는 방식을 택했다. 다른 방법들은 이유를 모르겠지만 제대로 구현되지 않았다. :(
1. 필요한 네임스페이스 선언
using System.Windows.Forms;
using System.Drawing;
using Excel = Microsoft.Office.Interop.Excel;
2. 엑셀 파일로 저장하는 Excel Export 구현
//Field
private Excel._Application excel = new Excel.Application();
private Excel._Workbook = null;
private Excel._Worksheet worksheet = null;
//Excel Export
private void ExportToExcel()
{
workbook = excel.Workbooks.Add();
worksheet = workbook.ActiveSheet;
string picturePath = "이미지 경로 + 이미지 파일 이름 + 확장자";
//셀(B, 2)에 이미지를 삽입한다.
int cellImageRowNum = 2;
int cellImageColNum = 2;
///////////////////////////////////////////////////////////
InsertImage(picturePath, cellImageRowNum, cellImageColNum);
///////////////////////////////////////////////////////////
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.DefaultExt = ".xlsx";
saveFileDialog.Filter = "Microsoft Excel Workbook (*.xls)|*.xlsx";
saveFileDialog.FileName = "파일 이름".ToString();
if(saveFileDialog.ShowDialog() == DialogReuslt.OOK)
{
workbook.SaveAs(saveFileDialog.FileName);
workbook.Close();
excel.Quit();
workbook = null;
excel = null;
}
}
3. 원하는 셀 위치에 이미지를 삽입하는 InsertImage 구현.
//cellImageRowNum: 원하는 세로 셀(셀 1, 2, ...)
//cellImageColNum: 원하는 가로 셀(셀 A, B, ...)
private void InsertImage(String picturePath, int cellImageRowNum, int cellImageColNum)
{
Excel.Range range = (Excel.Range)worksheet.Cells[cellImageRowNum, cellImageColNum];
Image image = Image.FromFile(picturePath);
ClipBoard.SetDataObject(image, true);
worksheet.Paste(range, picturePath);
}
4. 실행 결과
이미지가 셀 위치(B, 2)에 정상적으로 삽입되었습니다.
- 2022-11-22 수정) 셀 안에 삽입된 것은 아닙니다. 참고 바랍니다.
삽입한 이미지 크기 조절 관련 글은 따로 게시하겠습니다.
참고 사이트)
How to programmatically add a Picture or Icon to an Excel WorkSheet using C#
private void insertImage() { Excel.Application ThisApplication = new Excel.ApplicationClass(); Excel.Workbook ThisWorkBook; string _stFileName = "D:\\Test.xls"; string _stLOGO = "D:\\LOGO.bmp"; object missing = System.Reflection.Missing.Value; try { ThisWo
social.msdn.microsoft.com
728x90
반응형
'개발 공부 > C# 학습' 카테고리의 다른 글
[C# 학습] 자식 폼 호출 시 부모 폼 기능 비활성화(Form 호출 시 다른 Form 사용 막기, Controls 활용) (0) | 2022.11.25 |
---|---|
[C# 학습] 자식 폼 하나만 활성화하기(Show() 폼 중복 실행 방지, FormClosing 활용) (2) | 2022.11.25 |
[C# 학습] 폼1 -> 폼2 데이터 전송(다른 폼에 데이터(클래스) 전송, 이벤트 이용) (0) | 2022.11.08 |
[C# 학습] OleDbConnection, OleDbCommand, OleDbDataAdapter, OleDbDataReader (0) | 2022.10.24 |
[C# 학습] .NET Framework 데이터 공급자 (0) | 2022.10.24 |