ส่งออกสเปรดชีต Excel ไปยังไฟล์ข้อความที่มีความกว้างคงที่หรือไม่


24

Excel มีฟังก์ชั่นเพื่อนำเข้าไฟล์ข้อความความกว้างคงที่ซึ่งจะมีกล่องโต้ตอบที่ให้คุณเลือกตำแหน่งที่จุดเริ่มต้นและจุดสิ้นสุดอยู่ในคอลัมน์

มันยังมีฟังก์ชั่นที่สเปรดชีตที่มีอยู่คุณสามารถส่งออกไปยังไฟล์ข้อความที่มีความกว้างคงที่ได้หรือไม่?

ถ้าเป็นเช่นนั้นฉันจะเข้าถึงสิ่งนี้ได้อย่างไร ฉันได้ลองใช้บันทึกเป็นและเลือกไฟล์ข้อความ แต่ดูเหมือนว่าจะบันทึกเป็นตัวคั่นแท็บเท่านั้นซึ่งไม่ช่วยฉัน

นี่คือ Excel 2003 ถ้าจำเป็น

คำตอบ:


24

ฉันคิดว่าสิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับจากฟังก์ชัน Excel ดั้งเดิมคือบันทึกเป็น | ที่จัดรูปแบบข้อความ (อวกาศคั่น) (* .prn) โดยอัตโนมัติจะกำหนดความกว้างและแทรกช่องว่างให้กับความกว้างนั้นตามความจำเป็น

นอกเหนือจากนั้นคุณต้องมีมาโครหรือส่วนเสริมอื่น ๆ ที่จะช่วยให้คุณทำสิ่งต่างๆได้มากขึ้น


3
เพียงเพิ่มความชัดเจนบางส่วน - "จะ" กำหนดความกว้างโดยอัตโนมัติตามความกว้างที่คุณระบุสำหรับคอลัมน์ของคุณ ในขณะที่การวัดโดยปกติจะอยู่ที่ประมาณ ems (เท่าที่ฉันจำได้) เมื่อส่งออกไปยังความกว้างคงที่พวกเขาจะถูกนำมาใช้อย่างแท้จริงและปัดเศษลงเพื่อให้ค่าจำนวนเต็มที่ใช้สำหรับจำนวนอักขระในคอลัมน์ของไฟล์ prn ช่องว่างจะถูกเพิ่มสำหรับการขยายไปทางซ้ายหรือขวาขึ้นอยู่กับการจัดตำแหน่งในเซลล์ (ดังนั้นโดยค่าเริ่มต้นจะมีเบาะด้านซ้ายเพื่อบังคับให้ถูกต้องข้อความทางด้านขวาเพื่อบังคับซ้าย แต่ถ้าคุณเปลี่ยนการจัดแนวพวกเขาจะ แตกต่างกัน)
AdamV

สิ่งนี้ทำในสิ่งที่ฉันกำลังมองหา ขอบคุณ!
RationalGeek

1
โปรดทราบ: ข้อความที่จัดรูปแบบ (.prn) จำกัด ไว้ที่ 240 ตัวอักษรต่อบรรทัดใน Excel support.microsoft.com/kb/249885
iokevins

ในการใช้มาโครที่ชี้ไปโดย iokevins คุณจะต้องลบ "& delimiter" ออกจากสองที่ที่ CellText ถูกกำหนด มิฉะนั้นจะเพิ่มพื้นที่เพิ่มเติมสำหรับแต่ละเซลล์ซึ่งการบันทึกเนื่องจาก prn ไม่ได้ทำ
farrenthorpe

14

หากคุณมี Office Professional คุณสามารถเปิดไฟล์ Excel ใน Access แล้วส่งออกจาก Access การเข้าถึงจะช่วยให้คุณระบุรูปแบบความกว้างคงที่สำหรับไฟล์ที่ส่งออกของคุณและให้การควบคุมที่ละเอียดมากสำหรับการระบุความกว้างเหล่านั้น


ในขณะที่ Access อาจทำเช่นนั้น Excel จะเป็นสิ่งที่ถูกถาม
AdamV

7
ขอบคุณสำหรับ downvote แต่ฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึงว่า Access มีเวอร์ชันเต็มของฟีเจอร์นี้ Excel ไม่อนุญาตให้คุณระบุความกว้างของคอลัมน์โดยตรง Access ทำได้ ใช่คุณสามารถรับความกว้างของคอลัมน์ที่ถูกต้องใน Excel ได้ด้วยการหมุนไปรอบ ๆ กับความกว้างของคอลัมน์ในแผ่นงาน แต่มันเป็นเรื่องที่เจ็บปวดและเป็นคนที่ต้องสร้างไฟล์ความกว้างคงที่เป็นประจำมันไม่คุ้มค่าเวลา หากคุณมีสิทธิ์เข้าถึง (ซึ่งมีหลายคน) มีวิธีที่ดีกว่ามาก
davidcl

ที่ดีเยี่ยม ขอบคุณสำหรับทางเลือกนี้: o)
iokevins

5

ว้าวฉันจะถามคำถามนี้ด้วยตัวเอง แต่ถูกถามแล้ว เอาท์พุทคลิปบอร์ด Excel ทั้งหมดถูกtabคั่นด้วยค่าเริ่มต้น นี่เป็นสิ่งที่น่ารำคาญสำหรับเอาต์พุตข้อความธรรมดา "ของจริง" เมื่อคุณมีแบบอักษรความกว้างคงที่ แต่ไม่จำเป็นต้องรองรับตัวคั่นของแท็บ

อย่างไรก็ตามฉันพบและแก้ไขแมโคร Excel ขนาดเล็กที่จะคัดลอกภูมิภาคที่เลือกในปัจจุบันเป็นตาราง ASCII ที่มีความกว้างคงที่แบบง่ายเช่น:

187712 201 37 0.18   
2525 580 149 0.25   
136829 137 43 0.31   

นี่คือรหัสมาโคร หากต้องการใช้ให้แน่ใจว่าคุณเปิดใช้งานแท็บนักพัฒนาในตัวเลือกของ Excelหากคุณใช้ Excel 2007 หรือใหม่กว่า

Sub CopySelectionToClipboardAsText()

   ' requires a reference to "Windows Forms 2.0 Object Library"
   ' add it via Tools / References; if it does not appear in the list
   ' manually add it as the path C:\Windows\System32\FM20.dll

    Dim r As Long, c As Long
    Dim selectedrows As Integer, selectedcols As Integer

    Dim arr
    arr = ActiveSheet.UsedRange
    selectedrows = UBound(arr, 1)
    selectedcols = UBound(arr, 2)

    Dim temp As Integer
    Dim cellsize As Integer
    cellsize = 0
    For c = 1 To selectedcols
        temp = Len(CStr(Cells(1, c)))
        If temp > cellsize Then
            cellsize = temp
        End If
    Next c
    cellsize = cellsize + 1

    Dim line As String
    Dim output As String

    For r = 1 To selectedrows
        line = Space(selectedcols * cellsize)
        For c = 1 To selectedcols
            Mid(line, c * cellsize - cellsize + 1, cellsize) = Cells(r, c)
        Next c
        output = output + line + Chr(13) + Chr(10)
    Next r

    Dim MyData As MSForms.DataObject
    Set MyData = New DataObject
    MyData.SetText output
    MyData.PutInClipboard

    MsgBox "The current selection was formatted and copied to the clipboard"

End Sub

4

ก่อนอื่นให้จัดรูปแบบข้อมูลของคุณเป็น Courier ใหม่ (หรือแบบอักษรความกว้างคงที่อื่น ๆ ) จากนั้นบันทึกเป็น. prn แล้วคุณจะได้ความกว้างคงที่ที่แท้จริง


มันใช้งานได้ดีสำหรับฉัน ฉันยังต้องการจัดรูปแบบทุกอย่างเป็นข้อความก่อนที่จะทำเช่นนี้ ด้วยวิธีนี้ข้อมูลทั้งหมดจะถูกจัดแนวเมื่อบันทึกไว้
Gary Brunton

2

ขยายคำตอบของ Jeff Atwood เนื่องจากจะไม่ให้ความเห็นที่นั่น:

ฉันแก้ไขแมโครของเขาเพื่อตั้งค่าความกว้างคอลัมน์เป็นเซลล์ที่กว้างที่สุดในคอลัมน์นั้นและให้แต่ละคอลัมน์มีความกว้างของตัวเอง มาโครของเขาพบเซลล์ที่กว้างที่สุดในแถวแรกจากนั้นตั้งค่าความกว้างของคอลัมน์ทั้งหมด

Sub CopySelectionToClipboardAsText()

   ' requires a reference to "Windows Forms 2.0 Object Library"
   ' add it via Tools / References; if it does not appear in the list
   ' manually add it as the path C:\Windows\System32\FM20.dll

    Dim r As Long, c As Long, linesize As Long
    Dim selectedrows As Integer, selectedcols As Integer

    Dim arr
    arr = ActiveSheet.UsedRange
    selectedrows = UBound(arr, 1)
    selectedcols = UBound(arr, 2)
    ReDim CellSizes(1 To selectedcols, 2) As Integer

    Dim temp As Integer
    Dim cellsize As Integer
    linesize = 0
    For c = 1 To selectedcols
        cellsize = 0
        For r = 1 To selectedrows
            temp = Len(CStr(Cells(r, c)))
            If temp > cellsize Then
                cellsize = temp
            End If
        Next
        CellSizes(c, 0) = cellsize + 1
        CellSizes(c, 1) = linesize
        linesize = linesize + cellsize + 1
    Next c

    Dim line As String
    Dim output As String

    For r = 1 To selectedrows
        line = Space(linesize)
        For c = 1 To selectedcols
            Mid(line, CellSizes(c, 1) + 1, CellSizes(c, 0)) = Cells(r, c)
        Next c
        output = output + line + Chr(13) + Chr(10)
    Next r

    Dim MyData As MSForms.DataObject
    Set MyData = New DataObject
    MyData.SetText output
    MyData.PutInClipboard

    MsgBox "The current selection was formatted and copied to the clipboard"

End Sub

0

นี่คือนักฆ่าสำหรับฉัน มีตัวเลือกน้อยเช่นกัน

http://www.sensefulsolutions.com/2010/10/format-text-as-table.html


แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงนั้นเปลี่ยนแปลง
Ramhound

2
@Ramhound - โดยทั่วไปฉันเห็นด้วย แต่ในกรณีนี้ไม่มีอะไรที่ฉันสามารถคัดลอกได้ที่นี่ เว็บไซต์นั้นเป็นสถานที่ที่คุณวางข้อมูลการป้อนข้อมูลของคุณและคุณจะได้รับผลลัพธ์ "Excel ในรูปแบบ" หากลิงก์ไม่ถูกต้องแสดงว่าบริการนั้นหายไป
sancho.s Reinstate Monica

บริการได้ย้ายแล้ว: senseful.github.io/web-tools/text-tableและมีแหล่งที่มา: github.com/senseful/web-tools
ngm

ซึ่งได้ย้ายไปอีกแล้ว: senseful.github.io/text-table
Chris

0

มันทำงานร่วมกับการเข้าถึงนอกกรอบ: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmstepsด้วยสิ่งนี้ วิธีที่ฉันจัดการมันง่ายและรวดเร็ว - ดีกว่าด้วย Excel ในกรณีของฉันมันคือการแปลงของตาราง


ดูเหมือนว่าคุณโพสต์คำตอบของคุณในคำถามที่ไม่ถูกต้อง ;-) คำถามนี้ถามเกี่ยวกับ Excel ขณะที่คำตอบของคุณกำลังพูดถึงการเข้าถึง สำหรับคำตอบในอนาคต: การให้ลิงก์สำหรับการอ้างอิงนั้นมีประโยชน์ แต่คุณต้องรวมข้อมูลที่จำเป็นในการโพสต์ด้วย
robinCTS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.