HTML 표를 Excel에 붙여넣습니다. 줄 바꿈을 셀에 유지하는 방법
간단한 html 테이블이 있는데, 예를 들어 한 셀만 있는데 돔 노드를 복사해서 엑셀에 붙여넣으면 엑셀이 올바른 붙여넣기 데이터를 얻는 방법이라는 두 행으로 인식됩니다.
<table><tr><td>1<br>2</td><tr></table>
css 스타일을 추가하려고 했습니다.
br {mso-data-placement:same-cell;},
하지만 IE에서만 작동합니다.
참고: 일반 텍스트를 복사하는 것은 좋지 않습니다. 셀에 색상, 글꼴 정보를 추가해야 합니다.
많은 분들이 아시다시피 올바른 콘텐츠 유형 및 콘텐츠 폐기 헤더를 추가하는 것만으로 데이터(예: 보고서)를 Excel 파일로 출력할 수 있습니다.
Response.ContentType = “application/vnd.ms-excel“;
Response.AppendHeader(“content-disposition“, “inline; filename=report.xls“);
클라이언트에 MS Excel이 설치되어 있으면 웹 브라우저 대신 출력 HTML 페이지가 열립니다.Excel은 모든 형식 지정(보더, 글꼴 등) 및 테이블 태그를 해석하여 중량감 있는 서버 측 컨트롤을 사용하지 않고도 멋진 형식의 워크시트를 만들 수 있습니다.
제가 한동안 고민하던 문제는 다줄세포에 관한 것이었습니다.문자를 감방에 넣어야 했는데, 그걸 넣었을 때요.<br>HTML 출력에 태그를 지정하면 Excel은 기존 셀의 줄 바꿈이 아닌 새 행으로 해석합니다.
스타일시트에 추가합니다.
br {mso-data-placement:same-cell;}
그러면 마법처럼 작동하죠.유용했으면 좋겠네요:)
팁: 콘텐츠를 만들 수 있습니다.유형 및 헤더를 조건부로 입력하여 하나의 파일로 대체 HTML/XLS 보고서를 제공합니다.
Firefox는 mso-data-placement 명령을 완전히 무시하는 것처럼 보이며 Firebug 스타일 패널에 나타나지 않습니다.그래서 안 붙는 거겠죠?
다음 코드와 함께 매크로를 사용하는 것은 어떻습니까?
•TransformingPaste1(): 그러나 컴퓨터에서 실패합니다(아직 여러 셀).
- 클립보드 텍스트를 가져옵니다.
- 를 사용하여 변환된 버전을 붙여넣습니다.
mso-data-placement:same-cell - 원래 클립보드 텍스트를 복원합니다.
•TransformingPaste2(): 내 컴퓨터의 단일 셀에 붙여넣기, 포맷 등은 유지하지만 HTML을 붙여넣는 중이기 때문에 줄 바꿈이 아닌 공백이 생깁니다.
- 클립보드 텍스트를 가져옵니다.
- 를 사용하여 변환된 버전을 붙여넣습니다.
vbCrLf - 원래 클립보드 텍스트를 복원합니다.
•TransformingPaste3(): 줄 바꿈을 사용하여 컴퓨터의 단일 셀에 붙여넣지만 포맷 등이 손실됩니다(현재 구현). 링크가 있는 노트를 참조하십시오!
- 클립보드 텍스트를 가져옵니다.
- 자체 정의 토큰을 사용하여 변환된 버전을 붙여넣습니다.
- 원래 클립보드 텍스트를 복원합니다.
- 셀을 포스트 리셋하고 토큰을 줄 바꿈으로써 개선할 수 있습니다.
예를 들어 regex를 사용하여 교체 작업을 수행하는 등 사용자의 요구에 가장 적합한 방법으로 수정하십시오. 이 작업을 통해 문제가 해결되기를 바랍니다. :]
Function GetClipboardText() As String
Dim BufObj As MSForms.DataObject
Set BufObj = New MSForms.DataObject
BufObj.GetFromClipboard
GetClipboardText = BufObj.GetText
End Function
Function SetClipboardText(ByRef text As String)
Dim BufObj As MSForms.DataObject
Set BufObj = New MSForms.DataObject
BufObj.SetText text
BufObj.PutInClipboard
End Function
Function PreProcess(ByRef text As String, ByRef find As String, ByRef replace As String) As String
PreProcess = Application.WorksheetFunction.Substitute(text, find, replace)
End Function
Function PostProcess(ByRef find As String, ByRef replace As String)
Dim rCell As range
For Each rCell In Selection
'TODO: e.g. combine with answers from http://stackoverflow.com/questions/2192730/merge-contents-of-2-excel-cells-keeping-character-format-intact-using-vba
rCell.Formula = Application.WorksheetFunction.Substitute(rCell.Formula, find, replace)
Next
End Function
Sub TransformingPaste1()
Dim OrigText As String
Dim TempToken As String
Dim PasteText As String
Dim sSelAdd As String
OrigText = GetClipboardText
PasteText = PreProcess(OrigText, "<html>", "<html><style>br{mso-data-placement:same-cell;}</style>")
SetClipboardText PasteText
'Selection.PasteSpecial "Unicode Text"
ActiveSheet.Paste
SetClipboardText OrigText
Application.CutCopyMode = False
End Sub
Sub TransformingPaste2()
Dim OrigText As String
Dim TempToken As String
Dim PasteText As String
Dim sSelAdd As String
OrigText = GetClipboardText
PasteText = PreProcess(OrigText, "<br>", vbCrLf)
SetClipboardText PasteText
ActiveSheet.Paste
SetClipboardText OrigText
Application.CutCopyMode = False
End Sub
Sub TransformingPaste3()
Dim OrigText As String
Dim TempToken As String
Dim PasteText As String
Dim sSelAdd As String
OrigText = GetClipboardText
TempToken = "#mybr#"
PasteText = PreProcess(OrigText, "<br>", TempToken)
SetClipboardText PasteText
ActiveSheet.Paste
SetClipboardText OrigText
PostProcess TempToken, vbLf
Application.CutCopyMode = False
End Sub
저는 보통 xls 확장자로 테이블 태그에 싸인 실제 html 파일인 엑셀 파일을 사이트에서 다운로드해야 하기 때문에 이 문제에 직면합니다. br 태그가 셀에 있는 곳이면 어디서든 새로운 행이 생성됩니다.그래서 저는 br tag를 콤마로 대체하는 작은 vbscript 하나를 만든 후 파일을 엑셀로 엽니다.저한테는 잘 맞아요.
복사 붙여넣기를 수행해야 하는 경우 데이터를 복사하기 전에 Excel 시트의 '셀 속성'을 편집하는 것이 좋습니다.Excel에서 열 이름을 마우스 오른쪽 버튼으로 클릭하고 셀 속성을 선택합니다.데이터에 맞게 변경한 후 저장합니다.이제 데이터를 복사하여 MS-Excel에서 올바르게 해석할 수 있습니다.HTML 콘텐츠에 사용한 적은 없지만요.
언급URL : https://stackoverflow.com/questions/12774684/paste-a-html-table-into-excel-how-to-keep-the-line-break-in-cell 입니다.
'programing' 카테고리의 다른 글
| NPOI를 사용하여 파일을 읽는 방법입니다. (0) | 2023.04.25 |
|---|---|
| Base64 문자열을 디코딩하려면 어떻게 해야 합니까? (0) | 2023.04.25 |
| Android SQLite에서 날짜를 사용하는 가장 좋은 방법입니다. (0) | 2023.04.25 |
| Azure 서비스 버스 에뮬레이터입니다. (0) | 2023.04.25 |
| Windows 폼과 비교합니다.WPF입니다. (0) | 2023.04.25 |