2012-04-03 11 views
31

में स्वरूपित पाठ के लिए टैग के साथ एचटीएमएल टेक्स्ट एचटीएमएल लेने और इसे एक्सेल करने के लिए आयात करने का कोई तरीका है ताकि इसे समृद्ध टेक्स्ट (अधिमानतः वीबीए का उपयोग करके) के रूप में स्वरूपित किया जा सके? असल में, जब मैं एक एक्सेल सेल करने के लिए पेस्ट, मैं इस चालू करने के लिए देख रहा हूँ:एक्सेल सेल

<html><p>This is a test. Will this text be <b>bold</b> or <i>italic</i></p></html> 
इस में

:

यह एक परीक्षण है। इस पाठ करेंगे बोल्ड या इटैलिक

उत्तर

24

हाँ, यह संभव है :) वास्तव में इंटरनेट एक्सप्लोरर आप के लिए गंदे काम करते हैं;)

कोशिश की और परीक्षण

मेरा अनुमान

  1. मुझे लगता है कि HTML टेक्स्ट शीट 1 के सेल ए 1 में है। आप इसके बजाय एक चर का उपयोग भी कर सकते हैं।
  2. आप एक कॉलम एचटीएमएल मूल्यों से भरा है, तो बस नीचे दिए गए कोड एक पाश

कोड

Sub Sample() 
    Dim Ie As Object 

    Set Ie = CreateObject("InternetExplorer.Application") 

    With Ie 
     .Visible = False 

     .Navigate "about:blank" 

     .document.body.InnerHTML = Sheets("Sheet1").Range("A1").Value 

     .document.body.createtextrange.execCommand "Copy" 
     ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("A1") 

     .Quit 
    End With 
End Sub 

स्नैपशॉट

enter image description here

में डाल एचटीएच

सिड

+1

सिद्धार्थ, आपका समाधान बनाया अपनी रिपोर्टों बहुत nice..Thanks इतना देखो .. – javanoob

+9

यह VBA स्क्रिप्ट 'execCommand पर मेरे मशीन पर विफल" "लाइन कॉपी करें, मुझे संदेह है क्योंकि मेरे पास आईई 11 स्थापित है जो इसका समर्थन नहीं करता है। – BornToCode

+0

बोर्नटोकोड मेरे साथ भी यही बात हुई। –

7

आप HTML कोड को क्लिपबोर्ड पर कॉपी कर सकते हैं और इसे वापस यूनिकोड टेक्स्ट के रूप में चिपका सकते हैं। एक्सेल सेल में एचटीएमएल प्रस्तुत करेगा। इस पोस्ट http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/

पद से प्रासंगिक मैक्रो कोड की जाँच करें:

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim objData As DataObject 
    Dim sHTML As String 
    Dim sSelAdd As String 

    Application.EnableEvents = False 

    If Target.Cells.Count = 1 Then 
     If LCase(Left(Target.Text, 6)) = "<html>" Then 
     Set objData = New DataObject 

     sHTML = Target.Text 

     objData.SetText sHTML 
     objData.PutInClipboard 

     sSelAdd = Selection.Address 
     Target.Select 
     Me.PasteSpecial "Unicode Text" 
     Me.Range(sSelAdd).Select 

     End If 
    End If 

    Application.EnableEvents = True 

End Sub 
+0

धन्यवाद। एक्सेल 2010 में मुझे "माइक्रोसॉफ्ट फॉर्म 2.0 ऑब्जेक्ट लाइब्रेरी" से उपलब्ध 'डेटाऑब्जेक्ट' प्राप्त करने के लिए _Tools..References_ में 'FM20.DLL' मैन्युअल रूप से जोड़ना पड़ा। तब मुझे 'मी। पेस्टस्पेशियल' के साथ समस्या थी क्योंकि मुझे यह पसंद नहीं आया (कृपया कोई चुटकुले नहीं)। 'Target.PasteSpecial' ने एक त्रुटि दी, लेकिन 'शीट्स (1) .ेंज (" बी51 ")। पेस्टस्पेशियल ने काम किया। और मैंने पेस्ट को मर्ज किए गए सेल में लाने की कोशिश छोड़ दी, आउटपुट की चौड़ाई को नियंत्रित करने के लिए लाइन ब्रेक को मजबूर करने के लिए बस मेरे कॉन्फ़िगर किए गए HTML में बीआर टैग के उदार स्पिंकलिंग का उपयोग करना होगा। –

6

आईई उदाहरण उपयोग इस एक काम नहीं करता है। वैसे भी यह आईई के उदाहरण के ऊपर शुरू करने से तेज़ होना चाहिए।

यहाँ पर
http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/

नोट आधारित एक पूर्ण समाधान है, अगर आपके innerHTML सभी नंबरों को जैसे '12345', एचटीएमएल स्वरूपण dosen't पूरी तरह से एक्सेल में काम के रूप में यह संख्या अलग ढंग से व्यवहार करता है है? लेकिन अंत में एक वर्ण उदाहरण एक पिछली जगह जोड़ें। 12345 + "& nbsp;" प्रारूप ठीक है।

Sub test() 
    Cells(1, 1).Value = "<HTML>1<font color=blue>a</font>" & _ 
         "23<font color=red>4</font></HTML>" 
    Dim rng As Range 
    Set rng = ActiveSheet.Cells(1, 1) 
    Worksheet_Change rng, ActiveSheet 
End Sub 


Private Sub Worksheet_Change(ByVal Target As Range, ByVal sht As Worksheet) 

    Dim objData As DataObject ' Set a reference to MS Forms 2.0 
    Dim sHTML As String 
    Dim sSelAdd As String 

    Application.EnableEvents = False 

    If Target.Cells.Count = 1 Then 

      Set objData = New DataObject 
      sHTML = Target.Text 
      objData.SetText sHTML 
      objData.PutInClipboard 
      Target.Select 
      sht.PasteSpecial Format:="Unicode Text" 
    End If 

    Application.EnableEvents = True 

End Sub 
+4

किसी और के लिए एफवाईआई, मेरे पास मेरी डिफ़ॉल्ट संदर्भ लाइब्रेरी में एमएस फॉर्म 2.0 नहीं था, इसलिए मुझे इसे जोड़ना पड़ा। मेरे पीसी पर यह सी था: \ विन्डोज़ \ system32 \ FM20.dll –

+3

शानदार! जर्मन एक्सेल में, प्रारूप स्ट्रिंग को स्थानीयकृत किया गया है, मुझे 'sht.PasteSpecial प्रारूप: = "यूनिकोड-टेक्स्ट" की आवश्यकता है। अन्य स्थानीयकरण के लिए, मैक्रो में एक बार पेस्ट स्पेशल (या पेस्ट सामग्री) क्रिया रिकॉर्ड करें। – Andre

6

मैं जानता हूँ कि इस सूत्र प्राचीन है, लेकिन innerHTML बताए के बाद, ExecWB मेरे लिए काम किया:

.ExecWB 17, 0 
 
'Select all contents in browser 
 
.ExecWB 12, 2 
 
'Copy them

और फिर सिर्फ एक्सेल में सामग्री चस्पा करें। चूंकि ये विधियां रनटाइम त्रुटियों के लिए प्रवण होती हैं, लेकिन डीबग मोड में एक या दो प्रयासों के बाद ठीक काम करती हैं, तो आपको एक्सेल को फिर से प्रयास करने की आवश्यकता हो सकती है यदि यह किसी त्रुटि में चलता है। मैं उप को यह त्रुटि हैंडलर जोड़कर इस हल, और यह ठीक काम करता है:

Sub ApplyHTML() 
 
    On Error GoTo ErrorHandler 
 
    ... 
 
    Exit Sub 
 

 
ErrorHandler: 
 
    Resume 
 
    'I.e. re-run the line of code that caused the error 
 
Exit Sub 
 
     
 
End Sub

0

आप सभी वैध समाधान है, और उनमें से एक मुट्ठी भर के साथ आप वास्तव में यह लागू कर सकते हैं।

उपकरण की आवश्यकता नियमित अभिव्यक्तियों, linq, एक खोज इंजन, vb.net या सी # और इंटरनेट हैं।

"डेटासेट में HTML तालिका" के लिए खोजें। फिर "एक्सेल स्थापित किए बिना एक्सेल करने के लिए डेटासेट" खोजें।

मुझे लगता है कि उन शर्तों के साथ आप इसे एक साथ रखने में सक्षम हो सकते हैं। ;)

लेकिन यहां कुछ समाधान है।

  Using sr As StreamReader = New StreamReader(fileName, Encoding.UTF8) 
       result = sr.ReadToEnd() 
      End Using 
      result = result.Substring(result.IndexOf("<tab")) 
      Dim sb As New StringBuilder 
      sb.AppendLine("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"" ""http://www.w3.org/TR/html4/loose.dtd"">") 
      sb.AppendLine("<html>") 
      sb.AppendLine("<head>") 
      sb.AppendLine("<meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1" > "") 
      sb.AppendLine("<title>Title</title>") 
      sb.AppendLine("</head>") 
      sb.AppendLine("<body>") 
      sb.Append(result) 
      sb.AppendLine("</body>") 
      sb.AppendLine("</html>") 
      result = sb.ToString() 
      File.Move(fileName, System.IO.Path.GetFileNameWithoutExtension(fileName) + ".txt") 
      Dim ds As DataSet = GetTableAsDataSet.ConvertHTMLTablesToDataSet(result) 
      If (DataSetToExcel.WriteXLSFile(fileName, ds) = True) Then 

http://www.dotnetfunda.com/articles/show/51/convert-html-tables-to-a-dataset

http://www.codeproject.com/Tips/313731/How-to-convert-DataSet-to-Excel-workbook-xls-using

सादगी मेरी इनपुट फ़ाइल की खातिर एक HTML तालिका सही सही दृश्य देने उत्कृष्टता प्राप्त करने के नक्शे है। लेकिन एक विचार यह सब है। इसलिए मैंने मेटा स्टाइलिंग बकवास को पट्टी में पढ़ा और इसे डेटा सेट प्राप्त करने और डेटा सेट आउट लिखने के लिए वैध HTML फ़ीड में लपेट लिया। का आनंद लें।

मुझे लगता है कि नियमित अभिव्यक्ति एचटीएमएल के अन्य भाग सभा के साथ मदद कर सकता है ...

<table[^>]*>(.*?)</table> == <html[^>]*>(.*?)</html> 

क्रेडिट के लेखकों के लिए जाने कोड कहा। मैंने बस इसे एक साथ रखा।

1

मैं उसी त्रुटि में भाग गया जो बोर्नटोकोड को मूल समाधान की टिप्पणियों में पहली बार पहचाना गया था। एक्सेल और वीबीए से अपरिचित होने के कारण मुझे टीआईसीयू के समाधान को कार्यान्वित करने के बारे में पता लगाने में मुझे दूसरा स्थान मिला। इसलिए मैं Excel में

  1. पहले सक्षम डेवलपर मोड के नीचे एक "Dummies के लिए" समाधान के रूप में पोस्टिंग कर रहा हूँ: Link
  2. डेवलपर टैब का चयन करें> विजुअल बेसिक
  3. देखें क्लिक करें> कोड
  4. पेस्ट करें उन पंक्तियों को अद्यतन करने के नीचे कोड जो सेल संदर्भों को सही होने की आवश्यकता है।
  5. ग्रीन भागो तीर या प्रेस F5 क्लिक करें

Sub Sample() Dim Ie As Object Set Ie = CreateObject("InternetExplorer.Application") With Ie .Visible = False .Navigate "about:blank" .document.body.InnerHTML = Sheets("Sheet1").Range("I2").Value 'update to the cell that contains HTML you want converted .ExecWB 17, 0 'Select all contents in browser .ExecWB 12, 2 'Copy them ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("J2") 'update to cell you want converted HTML pasted in .Quit End With End Sub