programing

HTML 표를 Excel에 붙여넣습니다. 줄 바꿈을 셀에 유지하는 방법

fastcode 2023. 4. 25. 23:11
반응형

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 입니다.

반응형