-
C# WinForms DataGridView 복사 후 워드에 저장하기닷넷/WinForms 2023. 3. 21. 17:47반응형
2018.07.20 - [C#/WinForm] - C# DataGridView 엑셀 출력 빠르게 하기 (복사&붙여넣기)
여기서 DataGridView의 데이터를 클립보드에 저장한 걸 응용해서 Word에 붙여넣기하는 방식은 다음과 같습니다.
// 데이터그리드뷰 전체 선택 dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; dataGridView1.MultiSelect = true; dataGridView1.SelectAll(); // 클립보드에 복사하기 DataObject dataObj = dataGridView1.GetClipboardContent(); if (dataObj != null) { Clipboard.SetDataObject(dataObj); } // Word 개체 생성 Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application(); wordApp.Visible = true; // Word 창 표시 // 붙여넣기 wordApp.Selection.Paste(); // Word 개체 종료 wordApp.Quit();
만약, 그리드 형식을 유지하면서 붙여넣기를 하려는데 이 방법으로 안 된다면 다음의 방법을 사용합니다.
DataGridView의 그리드 형식을 유지하면서 Word에 붙여넣으려면, HTML 형식으로 데이터를 복사하고 Word 문서에 HTML 형식으로 붙여넣으면 됩니다.
private void CopyAndPastToWord() { // 데이터그리드뷰 내용 전체 선택 dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; dataGridView1.MultiSelect = true; dataGridView1.SelectAll(); // Clipboard에 복사 DataObject dataObj = dataGridView1.GetClipboardContent(); if (dataObj != null) { // Clipboard에 있는 데이터를 HTML 형식의 데이터로 가져옵니다. string html = dataObj.GetData(DataFormats.Html) as string; // 위의 코드에서 html이 null이 된다면 아래와 같이 Clipboard에서 가져옵니다. // string html = Clipboard.GetData(DataFormats.Html) as string; // 가져온 HTML 데이터를 처리합니다. // 예를 들어, HTML 데이터를 수정하여 특정 스타일이 적용되도록 변경할 수 있습니다. // 이 부분은 상황에 따라 다르게 구현될 수 있습니다. // 선이 표시가 되지 않는다면 여기서 선 추가하는 스타일을 추가하면 됩니다. // html = ModifyHtml(html); // HTML 데이터를 Clipboard에 저장합니다. if (!string.IsNullOrEmpty(html)) { Clipboard.SetData(DataFormats.Html, html); } } // Word 개체 생성 Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application(); // Word 문서 추가 Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Add(); wordApp.Visible = true; // Word 창 표시 // Word 문서에 Clipboard에 저장된 HTML 형식의 데이터를 붙여넣습니다. Microsoft.Office.Interop.Word.Range range = doc.Range(); range.PasteSpecial(DataType: Microsoft.Office.Interop.Word.WdPasteDataType.wdPasteHTML, Placement: Microsoft.Office.Interop.Word.WdPasteOptions.wdInLine, DisplayAsIcon: false); } /// <summary> /// ModifyHtml 메소드는 HTML 데이터를 수정하는 함수입니다. /// 이 함수를 사용하여 클립보드에 복사된 HTML 데이터를 수정하여 다른 스타일이나 형식으로 변경할 수 있습니다. /// 예를 들어, 다음은 HTML 데이터에서 <td> 태그와 <tr> 태그 사이에 스타일을 추가하는 예제 코드입니다. /// </summary> /// <param name="html"></param> private string ModifyHtml(string html) { // HTML 데이터에서 <td>와 </td> 태그 사이에 스타일을 추가합니다. html = Regex.Replace(html, "<td(.*?)>(.*?)</td>", "<td$1 style=\"background-color: yellow\">$2</td>"); // HTML 데이터에서 <tr>와 </tr> 태그 사이에 스타일을 추가합니다. html = Regex.Replace(html, "<tr(.*?)>(.*?)</tr>", "<tr$1 style=\"background-color: gray\">$2</tr>"); return html; }
참고로 Microsoft.Office.Interop.Word.WdPasteDataType은 Enum 형식으로 Word 문서에 붙여넣을 데이터의 형식을 지정하는 데 사용되며, wdPasteHTML 외에도 9개가 있습니다.
다음은 각 값에 대한 설명입니다.
반응형'닷넷 > WinForms' 카테고리의 다른 글
C# 윈폼에 아키텍처 패턴을 적용해보자! (feat. MVP, MVVM) (0) 2024.02.22 C# WinForms DevExpress AccordionControl 사용하기 (1) 2023.08.23 C# WinForms DevExpress CheckedListBoxControl에 바인딩 된 아이템들 중에서 특정 아이템만 체크/미체크 안 되게 비활성화 하는 방법 (0) 2023.02.24 C# Winforms 직접 만든 달력 (커스텀 달력) (0) 2023.01.13 C# WinForms DevExpress GridControl에 체크박스 칼럼 (헤더 포함) 추가하기 (0) 2022.12.12