আমি কীভাবে এক্সেলকে আমার সুস্বাদু সিএসভি ফাইলগুলি খাওয়া এবং অকেজো ডেটার উত্সাহিত করা থেকে আটকাতে পারি?


128

আমার কাছে একটি ডাটাবেস রয়েছে যা সিরিয়াল নম্বর অনুসারে উইজেটগুলির বিক্রয় ট্র্যাক করে। ব্যবহারকারীরা ক্রেতার ডেটা এবং পরিমাণ প্রবিষ্ট করে এবং প্রতিটি উইজেটকে একটি কাস্টম ক্লায়েন্ট প্রোগ্রামে স্ক্যান করে। তারপরে তারা অর্ডার চূড়ান্ত করে। এটি সব নির্বিঘ্নে কাজ করে।

কিছু গ্রাহক তারা যে উইজেটগুলি কিনেছেন তার একটি এক্সেল-সামঞ্জস্যপূর্ণ স্প্রেডশিট চান। আমরা এটি একটি পিএইচপি স্ক্রিপ্ট দিয়ে উত্পন্ন করি যা ডেটাবেস অনুসন্ধান করে এবং স্টোরের নাম এবং সম্পর্কিত ডেটা সহ সিএসভি হিসাবে ফলাফলকে আউটপুট করে। এটি পুরোপুরি খুব ভাল কাজ করে।

নোটপ্যাড বা vi এর মতো কোনও পাঠ্য সম্পাদকটিতে যখন ফাইলটি খোলা থাকে তখন ফাইলটি এমন দেখাচ্ছে:

"Account Number","Store Name","S1","S2","S3","Widget Type","Date"
"4173","SpeedyCorp","268435459705526269","","268435459705526269","848 Model Widget","2011-01-17"

আপনি দেখতে পাচ্ছেন, ক্রমিক সংখ্যা উপস্থিত রয়েছে (এই ক্ষেত্রে দু'বার, সমস্ত মাধ্যমিক সিরিয়াল একই নয়) এবং সংখ্যার দীর্ঘ স্ট্রিং রয়েছে। এই ফাইলটি যখন এক্সেলে খোলা হয়, ফলাফলটি হয়ে যায়:

Account Number  Store Name  S1  S2  S3  Widget Type Date 
4173    SpeedyCorp  2.68435E+17     2.68435E+17 848 Model Widget    2011-01-17

আপনি যেমন পর্যবেক্ষণ করেছেন, ক্রমিক সংখ্যাগুলি ডাবল উদ্ধৃতি দ্বারা আবদ্ধ থাকে। এক্সেল মনে হয় না .csv ফাইলগুলিতে পাঠ্য যোগ্যতার সম্মান করে। অ্যাক্সেসে এই ফাইলগুলি আমদানি করার সময়, আমাদের শূন্যের অসুবিধা হয়। পাঠ্য হিসাবে এগুলি খোলার সময় কোনও ঝামেলা নেই। কিন্তু এক্সেল ব্যর্থ হয়ে এই ফাইলগুলিকে অকেজো আবর্জনায় রূপান্তর করে। একটি অ-ডিফল্ট অ্যাপ্লিকেশন সহ কোনও সিএসভি ফাইল খোলার শিল্পে শেষ ব্যবহারকারীদের নির্দেশ দেওয়ার চেষ্টা করা হচ্ছে, আমরা কি ক্লান্তিকর বলব? আশা আছে কি? এমন কোনও সেটিং আছে যা আমি খুঁজে পাচ্ছি না? এটি এক্সেল 2003, 2007 এবং 2010 এর ক্ষেত্রে মনে হয়।


46
আমি কি কেবল নামের জন্য একটি +1 দিতে পারি?
সমাধি 89৯

11
Excel does not seem to respect text qualifiers in .csv files- উদ্ধৃতি চিহ্ন হয় না টেক্সট কোয়ালিফায়ার, তারা কেবল আপনার তথ্য কমা অনুমতি, আপনি যদি আপনার তথ্য কমা ব্যবহার করবেন না তারপর তারা অর্থহীন । কোনও সিএসভি ফাইলে থাকা সমস্ত ডেটা টাইপযুক্ত নয়, তাই এক্সেল কেবল অনুমান করতে পারে যে আপনার বৃহত্তর সিরিয়াল নম্বরটি একটি সংখ্যা এবং যখন আপনি এক্সেলের সর্বোচ্চ সংখ্যার 15 অঙ্কের নির্ভুলতায় চলে যান যা এটি আপনার সংখ্যাগুলি কেটে দিচ্ছে ।
DMA57361

1
এক্সেল ডাবল কোটের মধ্যে সমস্ত কমা সম্মান করে বলে মনে হচ্ছে না। "12 আগস্ট, 2012" বিবেচনা করুন এক্সেল এটিকেও আবর্জনায় পরিণত করে।
zundarz

5
আমি এই এসই প্রশ্নটি উল্লেখ করতে চাই । এক্সেলে সিএসভি নিয়ে কাজ করার সময় আপনার কাছে কোন বিকল্প রয়েছে তা এটি ব্যাখ্যা করে।
নিকদাদা

1
@ নিক্সদা ধন্যবাদ! সেগুলি দরকারী পরামর্শ, বিশেষত আরও অভিজ্ঞ ব্যবহারকারীদের জন্য। আমার সমস্যা হ'ল প্রায় এক মানব সমস্যা, এতে এক্সেল নিজেকে .csv ফাইলগুলির সাথে যুক্ত করে এবং লোকেরা আইকনটি দেখে এবং ডাবল ক্লিক করে (কারণ আপনি কীভাবে বিষয়গুলি খোলেন) এবং তারপরে সাধারণত সেভটি চাপুন (কারণ আমরা সবসময় বলছি তাদের সংরক্ষণ করুন!), এবং সমস্ত হারিয়ে গেছে। তবে সম্ভব হলে আমি অবশ্যই আপনার পদ্ধতিগুলি ব্যবহার করব।
atroon

উত্তর:


58

কিন্তু এক্সেল ব্যর্থ হয়ে এই ফাইলগুলিকে অকেজো আবর্জনায় রূপান্তর করে।

এক্সেল অকেজো আবর্জনা।

সমাধান

আমি যদি কিছু এক্সেল বিন্যাসে আপনার ডেটা চান কোনও ক্লায়েন্ট সেই তিনটি কলামের দৃশ্যমান বিন্যাসটি শূন্য দশমিক স্থানে "সংখ্যা" বা "পাঠ্য" তে পরিবর্তন করতে না পারলে আমি একটু অবাক হব। তবে আসুন ধরে নেওয়া যাক কীভাবে করা যায় তা একটি দস্তাবেজ প্রশ্নের বাইরে।

আপনার বিকল্পগুলি হ'ল:

  1. আপনার ক্রমিক সংখ্যাগুলিতে কোনও শৌখিন স্পেস অক্ষর নয় এমন একটি অ সংখ্যাবিশেষ টস করুন।
  2. কিছু ডিফল্ট ফর্ম্যাটিং সহ একটি xls ফাইল বা xlsx ফাইল লিখুন।
  3. সূত্র হিসাবে এই সংখ্যাগুলি ঠকানো এবং আউটপুট করুন ="268435459705526269","",="268435459705526269"(আপনি ="268435459705526269",,="268435459705526269"নিজের 2 অক্ষর সংরক্ষণও করতে পারেন )। এটি সঠিকভাবে প্রদর্শন করার সুবিধা রয়েছে, এবং সম্ভবত সাধারণত দরকারী হয়ে উঠছে তবে সূক্ষ্মভাবে ভাঙা হয়েছে (তারা সূত্র হিসাবে))

বিকল্প 3 সহ সাবধানতা অবলম্বন করুন, কারণ কিছু প্রোগ্রাম (এক্সেল ও ওপেন অফিস ক্যালক সহ), =""ক্ষেত্রের ভিতরে কমাগুলি আর পালানো হিসাবে ব্যবহার করবে না । এর অর্থ ="abc,xyz"দুটি কলাম বিস্তৃত হবে এবং আমদানিটি ভঙ্গ হবে।

ফর্ম্যাটটি ব্যবহার করে "=""abc,xy"""এই সমস্যার সমাধান হয় তবে এক্সেলের সূত্র দৈর্ঘ্যের সীমাটির কারণে এই পদ্ধতিটি আপনাকে 255 টি অক্ষরে সীমাবদ্ধ করে।


1
আসলে, এটি কঠোর হচ্ছে না। উপরের একটি নম্বরকে অনুলিপি করুন এবং এক্সেলে পেস্ট করুন, তারপরে প্রস্তাবিত নম্বর বিন্যাসটি পরিবর্তন করুন। এক্সেল মান পরিবর্তন করে, ফলে আবর্জনা হয়।
জো ইন্টারনেট

1
@ জো, আমি আমার প্রাথমিক পর্যালোচনাতে খুব অভিশাপ ছিল। এক্সেল প্রকৃতপক্ষে আবর্জনা উত্পাদন করছে এবং এটি নিজেই আবর্জনা। আমি আমার উত্তর আপডেট করেছি। কোনও বিকল্পের মধ্যে "এক্সেল সিএসভি" থাকা এবং "ব্যবহারযোগ্য, সার্থক সিএসভি" থাকাও থাকতে পারে
টাইলার

2
@ টাইলার - আমি মনে করি না এক্সেলটি আবর্জনা, কেবল এই বলে যে ওপি সঠিক ছিল যে এটি এই ক্ষেত্রে আবর্জনা উত্পাদন করে। আপাতদৃষ্টিতে মার্জিত সমাধান ছাড়া এটি আসলে একটি খুব ভাল প্রশ্ন।
জো ইন্টারনেট

1
ফর্ম্যাট ঘর ... বিকল্পটি প্রস্তাব করা হয়েছে, এবং আমি এটি ব্যবহারের চেষ্টা করেছি। এই ক্ষেত্রে, আপনি ফাইলটি খোলার মুহুর্তে, এক্সেল মনে হয় সিরিয়ালগুলি বৈজ্ঞানিক স্বরলিপিতে রূপান্তর করেছে (সম্মত, অপ্রত্যাশিত নয়) এবং যথার্থতা টস করে। আপনি এগুলি কোনও সংখ্যায় বা পাঠ্যে পরিবর্তন করলে স্ট্রিংটি ফিরে আসে না। এটিই আসলে সমস্যার সারমর্ম। সূত্র হিসাবে আউটপুটিং যদিও এটি করতে পারে ... আমি এটি ভাবিনি।
atroon

9
@ DMA57361 আচরণটি প্রত্যাশিত নয়, এটি নির্ধারণযোগ্য। সংক্ষিপ্ত নির্ভুলতা ভাল নথিভুক্ত করা হয়, এক্সেল সিএসভিগুলি কীভাবে পড়ে তা নয়। সতর্কতার অভাব এবং নিঃশব্দে ডেটা বাতিল করা অযৌক্তিক। আপনি কীভাবে ডেটা আমদানি করবেন তা এক্সেলকে বলতে না পারার বিষয়টিও সমানভাবে অযৌক্তিক। নেতিবাচকতা কি প্রয়োজন ? না, তবে সততা হ'ল সেরা নীতি এবং এটিই আমার বোধ হয়।
টাইলার

42

আমাদের একই ধরণের সমস্যা হয়েছিল যেখানে আমাদের সিএসভি ফাইলগুলি ছিল 3-5 এর মতো পরিসীমাযুক্ত কলাম সহ এবং এক্সেল সর্বদা তাদের তারিখগুলিতে রূপান্তরিত করবে যেমন 3-5 হবে 3 মার্চ, তার পরে সংখ্যায় ফিরে যাওয়া আমাদের একটি অকেজো তারিখ পূর্ণসংখ্যা দেয়। আমরা এটি কাছাকাছি পেয়েছিলাম

  1. টিএসটি এক্সটেনশনে সিএসভি নামকরণ করা হচ্ছে
  2. তারপরে আমরা যখন এটি এক্সেলে খুলি, এটি পাঠ্য আমদানি উইজার্ডটিকে কিক করবে
  3. উইজার্ডের 3 য় 3 য় পদক্ষেপে আমরা এটিকে বললাম যে প্রশ্নের মধ্যে থাকা কলামগুলি পাঠ্য ছিল এবং সেগুলি সঠিকভাবে আমদানি করা হয়েছিল

আপনি এখানে একই কাজ করতে পারেন আমি মনে করি।

পাঠ্য আমদানি উইজার্ড

চিয়ার্স


2
এটি করার সঠিক উপায় হওয়ার জন্য +1। (সম্পাদনা করুন: দুঃখিতটিকে সমাধানটি পরিষ্কার করতে কিছুটা সম্পাদনা করতে হয়েছিল)
জয়

2
আপনাকে আপনার ফাইলটির নাম পরিবর্তন করতে হবে না। শুধু আমদানি উইজার্ডটি ব্যবহার করুন শিফট-সমস্ত কলাম এবং নির্বাচন করুন পাঠ্য হিসাবে।
নিকদাদা

1
পাঠ্য আমদানি উইজার্ড এর উত্তর। অন্যান্য সমস্ত সমাধান হ'ল অযৌক্তিক হ্যাকারি যার ফলে সিএসভিগুলি দেখতে এবং সম্পাদনা করতে এক্সেল ব্যবহার করতে হয়।
এক্সেলেল

1
@ এক্সসেল, এটি একবারে নিশ্চিত করে এক ফাইল করুন। এই প্রক্রিয়াটি স্বয়ংক্রিয় করার সময়, 'অযথা হ্যাকারি' প্রায়শই দিনটি সাশ্রয় করে।
পরীশ স্বামী

1
স্ট্যান্ডার্ড ব্যবহারকারীরা সিএসভি ফাইল প্রদর্শনের জন্য এক্সেল ব্যবহার করলে এটি সম্পূর্ণ অকেজো less আমি কীভাবে টেক্সট-আমদানি-উইজার্ডটি 15 ডলার শিক্ষানবিশ অফিস ব্যবহারকারীদের ব্যবহার করতে হয় তা বোঝানোর চেষ্টা করার আগে, আমি বরং নিজেরাই এক্সেল ডকুমেন্ট উত্স কোড টাইপ করব।
উত্তরকিল্ডোনান

8

এক্সএমএল ওয়ার্কবুক উত্পন্ন করা ভাল সমাধান। এটার মত:

<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
  </OfficeDocumentSettings>

  <ss:Worksheet ss:Name="Sheet 1">
    <Table>
    <Column ss:Width="100"/>
    <Column ss:Width="100"/>
    <Column ss:Width="150"/>
    <Column ss:Width="150"/>
    <Column ss:Width="150"/>
    <Column ss:Width="150"/>
    <Column ss:Width="80"/>
    <Column/>

    <Row>
      <Cell><Data ss:Type="String">Account Number</Data></Cell>
      <Cell><Data ss:Type="String">Store Name</Data></Cell>
      <Cell><Data ss:Type="String">S1</Data></Cell>
      <Cell><Data ss:Type="String">S2</Data></Cell>
      <Cell><Data ss:Type="String">S3</Data></Cell>
      <Cell><Data ss:Type="String">Widget Type</Data></Cell>
      <Cell><Data ss:Type="String">Date</Data></Cell>
    </Row>

    <Row>
      <Cell><Data ss:Type="String">4173</Data></Cell>
      <Cell><Data ss:Type="String">SpeedyCorp</Data></Cell>
      <Cell><Data ss:Type="String">268435459705526269</Data></Cell>
      <Cell><Data ss:Type="String">x</Data></Cell>
      <Cell><Data ss:Type="String">268435459705526269</Data></Cell>
      <Cell><Data ss:Type="String">848 Model Widget</Data></Cell>
      <Cell><Data ss:Type="String">2011-01-17</Data></Cell>
    </Row>


    </Table>
    <x:WorksheetOptions/>
  </ss:Worksheet>
</Workbook>

ফাইলটির অবশ্যই .xML এক্সটেনশন থাকতে হবে। এক্সেল এবং ওপেন অফিস এটি সঠিকভাবে খুলুন open


আপনার অর্থ কি এই যে ওপি পিএইচপি স্ক্রিপ্ট ব্যবহার করে ডাটাবেসকে এক্সএমএল ফর্ম্যাটে রূপান্তর করতে পারে?
প্রসন্ন

2
ব্যবহারকারীরা এক্সেলের মধ্যে .csv খোলার চেয়ে বেশি ক্লিনার বা আপনার সিএসভিতে বিশৃঙ্খলা তৈরি করছে যাতে কেবল এক্সেলই আপনার সিএসভি বুঝতে পারে। এটি স্কিমার জটিলও নয়।
বিনকি

এই স্ট্যান্ডার্ড নথিভুক্ত কোথায়? আমি উপলব্ধ ডেটা ধরণের সম্পর্কে আরও জানতে চাই।
জন দোহার্টি

1

আমার সমাধান: সিরিয়াল নম্বর আমদানি করার ক্ষেত্রে আমি একই সমস্যা পেয়েছি। তাদের সংখ্যা হিসাবে গণ্য করতে হবে না, অর্থাত্ কোনও গাণিতিক কার্য সম্পাদন করা হয় না, তবে আমাদের সেখানে পুরো সংখ্যাটি প্রয়োজন। আমার কাছে সবচেয়ে সহজ জিনিসটি হ'ল সিরিয়াল নম্বরটিতে একটি স্থান .োকানো। যেমন "12345678 90123456 1234"। এক্সেল যখন এটি আমদানি করে, তখন এটি সংখ্যার পরিবর্তে পাঠ্য হিসাবে বিবেচিত হবে।


0

আমার দীর্ঘ অ্যাকাউন্ট নম্বর গার্ফড ছিল।

আমি এটি ঠিক করেছি:

আপনার ফাইল সিএসভিটি লিবার অফিস / ওপেন অফিসে খুলুন (আপনাকে ডিলিমিটারগুলি নির্দিষ্ট করতে হতে পারে) তারপরে ফাইলটি এক্সেল এক্সএমএল ফাইল হিসাবে সংরক্ষণ করুন।

তারপরে এই ফাইলটি এক্সলে খুলুন এবং তারপরে আপনি দেখতে পাবেন কলামগুলি আর বৈজ্ঞানিক বিন্যাসে বা যাই হোক না কেন পরিবর্তিত হবে। সুরক্ষিত থাকতে কলামটিতে ডান ক্লিক করুন এবং স্পষ্টভাবে পাঠ্য হিসাবে ফর্ম্যাটটি সেট করুন, তারপরে এক্সেল ফাইল ফর্ম্যাট হিসাবে সংরক্ষণ করুন।

এক্সেল ফর্ম্যাট ফাইলটি খুলুন এবং কলামটি ঠিক আছে!


1
এই সময় হবে কাজ করে, কেউ শুধুমাত্র ইংরাজি ভাঙ্গা কথা বলে ব্যাখ্যা করতে কেন তিনি একটি ভিন্ন অফিস স্যুট ব্যবহার করতে হবে চেষ্টা যেমন solves ঠিক যেমন অনেক সমস্যার সৃষ্টি করে। এম-অফিসে বিকল্প সফ্টওয়্যারটি আমার নিজের মতামত অনুসারে ভাল, তবে আমি বুঝতে পারি যে আমি সবাইকে রূপান্তর করতে পারি না।
atroon

0

ইম্পোর্ট উইজার্ডটি নৈমিত্তিক ব্যবহারকারী এবং এক-পরিস্থিতি পরিস্থিতিতে সর্বোত্তম সমাধান। যদি আপনার কোনও প্রোগ্রামেটিক সমাধানের প্রয়োজন হয় তবে আপনি ক্যোয়ারি টেবিলগুলি ব্যবহার করতে পারেন dএড পদ্ধতিটি (যা পর্দার পিছনে আমদানি উইজার্ড ব্যবহার করছে)।

Workbooks.Add
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & "C:\myfile.csv", Destination:=Range("$A$1"))
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 2, 2) 'Edit this line. Add a number for each column, 1 is general, 2 is text. Search the internet for other formats.
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.