닷넷/WinForms
C# WinForms DataGridView 복사 후 워드에 저장하기
FreeBear
2023. 3. 21. 17:47
반응형
2018.07.20 - [C#/WinForm] - C# DataGridView 엑셀 출력 빠르게 하기 (복사&붙여넣기)
C# DataGridView 엑셀 출력 빠르게 하기 (복사&붙여넣기)
이전에 포스팅한 2017/05/24 - [프로그래밍/C#] - C# DataGridView 데이터 엑셀파일에 저장 using oledb 은 데이터그리드뷰의 데이터를 엑셀파일로 출력할 때 속도가 느리다는 단점이 있다. 어떻게 하면 빠르
jasmintime.com
여기서 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개가 있습니다.
다음은 각 값에 대한 설명입니다.

반응형