Excel إلى CSV مع ترميز UTF8


Answers

لقد وجدت تطبيق جدول بيانات OpenOffice ، Calc ، جيد حقاً في التعامل مع بيانات CSV.

في مربع الحوار "حفظ باسم ..." ، انقر على "خيارات التنسيق" للحصول على ترميزات مختلفة لـ CSV. LibreOffice يعمل بنفس الطريقة AFAIK.

Question

لدي ملف Excel يحتوي على بعض الأحرف الإسبانية (tildes ، وما إلى ذلك) التي أحتاج إلى تحويلها إلى ملف CSV لاستخدامه كملف استيراد. ومع ذلك ، عندما أقوم بحفظ باسم CSV ، فإنه يقوم بتشذيب الحروف الإسبانية "الخاصة" التي ليست أحرف ASCII. يبدو أنه يقوم بذلك أيضًا مع علامات الاقتباس اليمنى واليمنى والشرطات الطويلة التي يبدو أنها قادمة من المستخدم الأصلي الذي قام بإنشاء ملف Excel في Mac.

نظرًا لأن ملف CSV هو مجرد ملف نصي ، فأنا متأكد من أنه يمكنه التعامل مع تشفير UTF8 ، لذا فأنا أعتقد أنه قيد Excel ، ولكنني أبحث عن طريقة للوصول من Excel إلى CSV والاحتفاظ بالأحرف غير ASCII سليم.




كما يبدو مضحكا ، أسهل طريقة وجدت لحفظ 180MB جدول البيانات في ملف CSV UTF8 هو تحديد الخلايا في Excel ، نسخها ولصق محتوى الحافظة إلى SublimeText.




يقوم Excel عادة بحفظ ملف CSV كترميز ANSI بدلاً من utf8.

خيار واحد لتصحيح الملف في استخدام "المفكرة" أو "المفكرة" ++:

  1. افتح .csv مع المفكرة أو Notepad ++.
  2. انسخ المحتويات إلى حافظة جهاز الكمبيوتر الخاص بك.
  3. احذف المحتويات من الملف.
  4. تغيير ترميز الملف إلى utf8.
  5. الصق المحتويات مرة أخرى من الحافظة.
  6. حفظ الملف.



حل آخر هو فتح الملف عن طريق winword وحفظه ك txt ثم إعادة فتحه من قبل اكسل وأنها ستعمل ISA




لدي نفس المشكلة ، وتأتي عبر this الإضافة ، وأنها تعمل بشكل جيد في excel 2013 إلى جانب اكسل 2007 و 2010 التي ذكر لها.




طريقة سهلة للقيام بذلك: قم بتنزيل المكتب المفتوح ( OpenOffice ) ، وقم بتحميل جدول البيانات وافتح ملف excel ( .xls أو .xlsx ). بعد ذلك فقط احفظه كملف CSV نص ويفتح نافذة تطلب الحفاظ على التنسيق الحالي أو حفظ كتنسيق. ODF. حدد "الاحتفاظ بالتنسيق الحالي" وفي النافذة الجديدة حدد الخيار الذي يناسبك ، وفقًا للغة التي تمت كتابة ملفك بها. بالنسبة للغة الإسبانية ، اختر Western Europe ( Windows-1252/ WinLatin 1 ) ويعمل الملف على ما يرام. إذا قمت بتحديد Unicode ( UTF-8 ) ، فلن تعمل مع الأحرف الأسبانية.




يمكنك القيام بذلك على جهاز Windows حديث دون برنامج تابع لجهة خارجية. هذه الطريقة موثوقة وستتعامل مع البيانات التي تتضمن الفواصل المقتبسة ، وأسماء علامات التبويب المقتبسة ، وأحرف CJK ، وما إلى ذلك.

1. احفظ من Excel

في Excel ، احفظ البيانات إلى file.txt باستخدام النوع Unicode Text (*.txt) .

2. بدء تشغيل PowerShell

تشغيل powershell من قائمة ابدأ.

3. قم بتحميل الملف في PowerShell

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode

4. احفظ البيانات بتنسيق CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation



الترميز -> تحويل إلى Ansi ترميزه في ANSI / UNICODE. Utf8 هي مجموعة فرعية من Unicode. ربما في ANSI سيتم ترميز بشكل صحيح ، ولكن هنا نحن نتحدث عن UTF8 ،SequenceDigitale.

هناك طرق أسرع ، مثل التصدير كـ csv (محدد بفواصل) ثم فتح ذلك csv مع Notepad ++ (مجاني) ، ثم الترميز> التحويل إلى UTF8. ولكن فقط إذا كان عليك القيام بذلك مرة واحدة لكل ملف. إذا كنت بحاجة إلى التغيير والتصدير بشكل متكافئ ، فالأفضل هو حل LibreOffice أو GDocs.




لدى Microsoft Excel خيار لتصدير جدول البيانات باستخدام ترميز Unicode. انظر الصورة التالية.




لقد قمت بكتابة برنامج نصي صغير لـ Python يمكنه تصدير أوراق العمل بتنسيق UTF-8.

عليك فقط توفير ملف Excel كمعلمة أول متبوعة بالأوراق التي تريد تصديرها. إذا لم تقم بتوفير الأوراق ، سيقوم البرنامج النصي بتصدير كافة أوراق العمل الموجودة في ملف Excel.

#!/usr/bin/env python

# export data sheets from xlsx to csv

from openpyxl import load_workbook
import csv
from os import sys

reload(sys)
sys.setdefaultencoding('utf-8')

def get_all_sheets(excel_file):
    sheets = []
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    all_worksheets = workbook.get_sheet_names()
    for worksheet_name in all_worksheets:
        sheets.append(worksheet_name)
    return sheets

def csv_from_excel(excel_file, sheets):
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    for worksheet_name in sheets:
        print("Export " + worksheet_name + " ...")

        try:
            worksheet = workbook.get_sheet_by_name(worksheet_name)
        except KeyError:
            print("Could not find " + worksheet_name)
            sys.exit(1)

        your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
        wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
        for row in worksheet.iter_rows():
            lrow = []
            for cell in row:
                lrow.append(cell.value)
            wr.writerow(lrow)
        print(" ... done")
    your_csv_file.close()

if not 2 <= len(sys.argv) <= 3:
    print("Call with " + sys.argv[0] + " <xlxs file> [comma separated list of sheets to export]")
    sys.exit(1)
else:
    sheets = []
    if len(sys.argv) == 3:
        sheets = list(sys.argv[2].split(','))
    else:
        sheets = get_all_sheets(sys.argv[1])
    assert(sheets != None and len(sheets) > 0)
    csv_from_excel(sys.argv[1], sheets)



لم أتمكن من العثور على حل VBA لهذه المشكلة على Mac Excel. يبدو ببساطة أنه لا توجد طريقة لإخراج نص UTF-8.

لذلك اضطررت في النهاية للتخلي عن VBA ، بتة الرصاصة ، وتعلمت AppleScript. لم يكن سيئًا كما كنت أعتقد.

يتم وصف الحل هنا: http://talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html




لأولئك الذين يبحثون عن حل برمجي بالكامل (أو على الأقل من جانب الخادم) ، لقد حققت نجاحًا كبيرًا باستخدام أداة xls2csv من catdoc.

تثبيت catdoc:

apt-get install catdoc

هل التحويل:

xls2csv -d utf-8 file.xls > file-utf-8.csv 

هذا هو اشتعلت فيه النيران بسرعة.

لاحظ أنه من المهم أن تقوم بتضمين علامة -d utf-8 ، وإلا فسوف تقوم بتشفير المخرجات في الترميز الافتراضي cp1252 ، cp1252 لخطر فقد المعلومات.

لاحظ أن xls2csv أيضاً يعمل فقط مع ملفات .xls ، فإنه لا يعمل مع ملفات .xlsx .




جاء عبر نفس المشكلة وغوغل من هذا المنصب. لا شيء من المذكورة أعلاه عملت بالنسبة لي. في الماضي قمت بتحويل Unicode .xls إلى .xml (اختر حفظ باسم ... جدول بيانات XML 2003) وأنتج الحرف الصحيح. ثم كتبت رمزًا لتحليل xml واستخلاص المحتوى لاستخدامي.




"الطريقة السهلة" الوحيدة للقيام بذلك هي كما يلي. أولاً ، تأكد من وجود اختلاف بين ما يتم عرضه وما يتم الاحتفاظ به مخفيًا في ملف Excel .csv.

(1) افتح ملف Excel حيث لديك المعلومات (.xls ، .xlsx)

(2) في Excel ، اختر "CSV (محدد الفاصلة) (* .csv) كنوع الملف وحفظه كهذا النوع.

(3) في NOTEPAD (موجود أسفل "البرامج" ثم البرامج الملحقة في قائمة Start) ، افتح ملف csv المحفوظ في Notepad

(4) ثم اختر -> حفظ باسم .. وفي أسفل مربع "حفظ باسم" ، يوجد مربع اختيار يسمى "ترميز". حدد UTF-8 (لا تستخدم ANSI أو تفقد جميع درجات اللهجات إلخ). بعد تحديد UTF-8 ، قم بحفظ الملف إلى اسم ملف مختلف قليلاً عن الأصل.

هذا الملف في UTF-8 ويحتفظ بجميع الأحرف واللهجات ويمكن استيراده ، على سبيل المثال ، إلى MySQL وبرامج قواعد البيانات الأخرى.

هذا الجواب مأخوذ من هذا المنتدى .




أعلم أن هذا سؤال قديم لكنني صادفت هذا السؤال بينما كنت أواجه نفس القضايا مثل سياسة العمليات.

بعد عدم العثور على أي من الحلول المقدمة خيارًا قابلاً للتطبيق ، شرعت في اكتشاف ما إذا كان هناك طريقة للقيام بذلك باستخدام Excel فقط.

لحسن الحظ ، لقد وجدت أن مشكلة الأحرف المفقودة لا تحدث إلا (في حالتي) عند الحفظ من تنسيق xlsx إلى تنسيق csv. حاولت حفظ ملف XLSX إلى XLS أولا ، ثم إلى CSV. انها عملت فعلا.

يرجى محاولة إعطائها ومعرفة ما إذا كان يعمل من أجلك. حظا طيبا وفقك الله.