$lang['tuto'] = "টিউটোরিয়াল"; ?> এক্সেল সেলগুলিতে ছবি

এক্সেল সেলগুলিতে ছবি সন্নিবেশ করার জন্য একটি ক্রোম এক্সটেনশনে জাভাস্ক্রিপ্ট ব্যবহার করা

Temp mail SuperHeros
এক্সেল সেলগুলিতে ছবি সন্নিবেশ করার জন্য একটি ক্রোম এক্সটেনশনে জাভাস্ক্রিপ্ট ব্যবহার করা
এক্সেল সেলগুলিতে ছবি সন্নিবেশ করার জন্য একটি ক্রোম এক্সটেনশনে জাভাস্ক্রিপ্ট ব্যবহার করা

জাভাস্ক্রিপ্ট এবং শীটজেএস সহ এক্সেল ফাইলগুলিতে চিত্রগুলি এম্বেড করা

Excel (.xlsx) ফাইল তৈরি করে এমন একটি ক্রোম এক্সটেনশন ডেভেলপ করার সময়, সরাসরি কক্ষে ছবি এম্বেড করা একটি চ্যালেঞ্জিং কাজ হতে পারে। জাভাস্ক্রিপ্ট এবং লাইব্রেরি যেমন SheetJS স্প্রেডশীট তৈরি এবং সম্পাদনা সহজ করে, এমবেড করা ছবিগুলি পরিচালনা করার জন্য প্রায়শই আরও নির্দিষ্ট পরিচালনার প্রয়োজন হয়।

অনেক ক্ষেত্রে, ডেভেলপাররা সরাসরি ইমেজ এম্বেড করার পরিবর্তে সেলগুলিতে ইমেজ লিঙ্ক যোগ করতে সক্ষম হওয়ার সীমাবদ্ধতার সম্মুখীন হন। এই সমস্যাটি ইমেজ ডেটা কনভার্সন এবং এক্সেল ফাইল ফরম্যাটিং সংক্রান্ত জটিলতা থেকে উদ্ভূত হয়, বিশেষ করে ক্রোম এক্সটেনশনের মতো ব্রাউজার পরিবেশে।

এই নিবন্ধে, আমরা জাভাস্ক্রিপ্ট ব্যবহার করে সরাসরি এক্সেল ফাইল কক্ষে চিত্রগুলি এম্বেড করার একটি সমাধান অন্বেষণ করব। ছবিগুলি HTML উপাদানগুলি থেকে আনা হবে এবং উপযুক্ত এক্সেল কোষগুলিতে ঢোকানো হবে, যা ব্যবহারকারীদের তাদের স্প্রেডশীটের মধ্যে ভিজ্যুয়াল ডেটার প্রয়োজন তাদের জন্য আরও বিরামহীন অভিজ্ঞতা প্রদান করবে।

আমরা আলোচনা করব কিভাবে ExcelJS-এর মত লাইব্রেরিগুলিকে সংহত করা যায় এবং একটি সুরক্ষিত Chrome এক্সটেনশন পরিবেশে ছবি এম্বেড করার মতো সাধারণ চ্যালেঞ্জ মোকাবেলা করা যায়। উপরন্তু, আমরা একটি সফল বাস্তবায়ন নিশ্চিত করতে Node.js এবং Chrome এক্সটেনশন পদ্ধতির মধ্যে পার্থক্য পর্যালোচনা করব।

আদেশ ব্যবহারের উদাহরণ
ExcelJS.Workbook() এটি ExcelJS লাইব্রেরি ব্যবহার করে Node.js পরিবেশে একটি নতুন এক্সেল ওয়ার্কবুক অবজেক্ট তৈরি করে। ওয়ার্কশীট, ফরম্যাটিং এবং ছবি সহ স্ক্র্যাচ থেকে এক্সেল ফাইল তৈরি করার জন্য এটি অপরিহার্য।
addWorksheet() এই পদ্ধতিটি ওয়ার্কবুকে একটি নতুন ওয়ার্কশীট যোগ করে। এই সমস্যার পরিপ্রেক্ষিতে, এটি একটি শীট তৈরি করতে ব্যবহৃত হয় যেখানে ডেটা (টেক্সট এবং ছবি উভয়ই) সন্নিবেশ করা যেতে পারে।
axios.get() একটি URL থেকে ইমেজ ডেটা আনতে ব্যবহৃত হয়। এটি একটি অ্যারে বাফার বিন্যাসে বাইনারি ইমেজ ডেটা পুনরুদ্ধার করে, যা এক্সেল কোষে ছবি এম্বেড করার জন্য প্রয়োজনীয়।
workbook.addImage() এই কমান্ডটি এক্সেল ওয়ার্কবুকে একটি ইমেজ যোগ করে। চিত্রটিকে বাইনারি ডেটার বাফার হিসাবে সরবরাহ করা যেতে পারে, যা নির্দিষ্ট কোষগুলিতে চিত্রগুলি এম্বেড করার জন্য প্রয়োজনীয়।
worksheet.addImage() এই পদ্ধতিটি ওয়ার্কশীটের একটি নির্দিষ্ট কক্ষে বা কক্ষের পরিসরে যোগ করা ছবি স্থাপনের জন্য দায়ী, যা পাঠ্য ডেটার পাশাপাশি ভিজ্যুয়াল উপাদানগুলিকে এমবেড করার অনুমতি দেয়।
fetch() ব্রাউজার পরিবেশে, এই কমান্ডটি একটি দূরবর্তী সার্ভার থেকে চিত্রের অনুরোধ করতে এবং এটি একটি ব্লব হিসাবে পুনরুদ্ধার করতে ব্যবহৃত হয়। তারপর ব্লবটিকে Excel এ এম্বেড করার জন্য একটি base64-এনকোডেড স্ট্রিং-এ রূপান্তরিত করা হয়।
FileReader.readAsDataURL() এই কমান্ডটি ইমেজ ইউআরএল থেকে প্রাপ্ত ব্লব (বাইনারী বড় বস্তু) ডেটাকে বেস64 স্ট্রিং-এ রূপান্তরিত করে, এটিকে শীটজেএস-এর মাধ্যমে একটি এক্সেল ফাইলে এম্বেড করার জন্য সামঞ্জস্যপূর্ণ করে তোলে।
aoa_to_sheet() SheetJS থেকে এই পদ্ধতিটি অ্যারের অ্যারে (AoA) কে এক্সেল শীটে রূপান্তর করে। এটি পাঠ্য এবং চিত্র উভয়ই অন্তর্ভুক্ত করে এমন সাধারণ ডেটা স্ট্রাকচার সেট আপ করার জন্য বিশেষভাবে কার্যকর।
writeFile() ExcelJS এবং SheetJS উভয় ক্ষেত্রেই এই ফাংশনটি স্থানীয় ফাইল সিস্টেমে এমবেড করা চিত্র সহ জেনারেট করা এক্সেল ফাইলকে সংরক্ষণ করে। ওয়ার্কবুক তৈরি এবং সমস্ত প্রয়োজনীয় উপাদান যোগ করার পর এটি চূড়ান্ত পদক্ষেপ।

জাভাস্ক্রিপ্ট এবং এক্সেলজেএস ব্যবহার করে কীভাবে এক্সেল সেলগুলিতে চিত্রগুলি এম্বেড করবেন

আমি যে স্ক্রিপ্টটি দিয়েছি তা সরাসরি এক্সেল সেলগুলিতে ইমেজ এম্বেড করার সমস্যার সমাধান করে জাভাস্ক্রিপ্ট, ExcelJS, এবং Axios। প্রথমে, কমান্ড দিয়ে ExcelJS ব্যবহার করে একটি নতুন ওয়ার্কবুক শুরু করার মাধ্যমে স্ক্রিপ্ট শুরু হয় ExcelJS.ওয়ার্কবুক(), যা এক্সেল ফাইল তৈরির ভিত্তি। এটি তারপর কল করে একটি ওয়ার্কশীট তৈরি করে ওয়ার্কশীট যোগ করুন(). এই ওয়ার্কশীটটি সমস্ত ডেটা এবং চিত্রগুলির জন্য ধারক হিসাবে কাজ করে যা যোগ করা হবে৷ নমুনা ডেটাতে ইমেজ ইউআরএল অন্তর্ভুক্ত থাকে যেগুলি পরে আনা হবে এবং নির্দিষ্ট কক্ষগুলিতে এম্বেড করা হবে।

ইমেজ আনয়ন পরিচালনা করতে, স্ক্রিপ্টটি Axios লাইব্রেরি ব্যবহার করে axios.get() তাদের URL থেকে ইমেজ অনুরোধ করতে. অ্যাক্সিওস রেসপন্সটাইপ "অ্যারেবাফার" ব্যবহার করে বাইনারি ডেটা হিসাবে ছবিটি পুনরুদ্ধার করে, যা এক্সেল ফাইলে ছবির মতো বাইনারি সামগ্রী এম্বেড করার জন্য উপযুক্ত। ডেটা প্রাপ্তির পরে, ছবিটি একটি বাফার বিন্যাসে রূপান্তরিত হয়, যা ExcelJS-কে এটিকে একটি কক্ষে এম্বেড করার জন্য একটি বৈধ চিত্র হিসাবে স্বীকৃতি দেওয়ার অনুমতি দেয়।

একবার ইমেজ আনা এবং প্রক্রিয়া করা হয়, কমান্ড workbook.addImage() ওয়ার্কবুকে ইমেজ ঢোকাতে ব্যবহৃত হয়। এই ধাপটি চিত্রটিকে সংজ্ঞায়িত করে এবং এটিকে ওয়ার্কশীটের মধ্যে একটি নির্দিষ্ট স্থানে স্থাপন করার জন্য প্রস্তুত করে। এটি অনুসরণ করে, worksheet.addImage() বর্তমান সারির "B" কলামে এই ক্ষেত্রে চিত্রটি কোথায় স্থাপন করা উচিত তা নির্দিষ্ট করে। ছবিটি ঘরের মধ্যে ভালভাবে ফিট করে তা নিশ্চিত করতে সারির উচ্চতা সামঞ্জস্য করা হয়েছে।

অবশেষে, স্ক্রিপ্ট ব্যবহার করে ওয়ার্কবুক সংরক্ষণ করে workbook.xlsx.writeFile(), যা স্থানীয় সিস্টেমে ফাইলটি লেখে। এটি প্রক্রিয়াটি সম্পূর্ণ করে, যার ফলে শুধুমাত্র লিঙ্কের পরিবর্তে সরাসরি কোষে এমবেড করা ছবি সহ একটি এক্সেল ফাইল তৈরি হয়। এই পদ্ধতিটি সেই ক্ষেত্রে অত্যন্ত কার্যকর যেখানে চিত্রগুলিকে প্রতিবেদন বা ডেটা শীটে অন্তর্ভুক্ত করতে হবে, যা ডেটা এবং ভিজ্যুয়াল উপাদান উভয়ই ধারণ করে এমন এক্সেল ফাইলগুলির সাথে ইন্টারঅ্যাক্ট করার ব্যবহারকারীদের জন্য একটি বিরামহীন অভিজ্ঞতা প্রদান করে৷

ExcelJS এবং Axios ব্যবহার করে এক্সেল কোষে ছবি এম্বেড করা

এই সমাধানটি এক্সেল ওয়ার্কবুক তৈরির জন্য Node.js, ExcelJS এবং ইমেজ ডেটা আনার জন্য Axios ব্যবহার করে। এটি সরাসরি এক্সেল কোষে ইমেজ এমবেডিং পরিচালনা করে।

const ExcelJS = require('exceljs');
const axios = require('axios');
async function addImageToExcel() {
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet('My Sheet');

  const data = [
    { id: 1, imageUrl: 'https://example.com/image1.png' },
    { id: 2, imageUrl: 'https://example.com/image2.png' }
  ];

  worksheet.columns = [
    { header: 'ID', key: 'id', width: 10 },
    { header: 'Image', key: 'image', width: 30 }
  ];

  for (const item of data) {
    const row = worksheet.addRow({ id: item.id });
    row.height = 90;
    const imageId = workbook.addImage({
      buffer: (await axios.get(item.imageUrl, { responseType: 'arraybuffer' })).data,
      extension: 'png'
    });
    worksheet.addImage(imageId, \`B${row.number}:B${row.number}\`);
  }

  await workbook.xlsx.writeFile('ExcelWithImages.xlsx');
  console.log('Excel file with images saved!');
}

addImageToExcel().catch(console.error);

বেস 64 ডেটা এবং শীটজেএস ব্যবহার করে এক্সেলে চিত্রগুলি এম্বেড করা

এই সমাধানটি ক্রোম এক্সটেনশন পরিবেশে শীটজেএস ব্যবহার করে এক্সেল ফাইলে এমবেড করার আগে চিত্রগুলিকে আনয়ন এবং সেগুলিকে বেস64 ফর্ম্যাটে রূপান্তর করার উপর ফোকাস করে৷

async function getImageBase64(url) {
  const response = await fetch(url);
  const blob = await response.blob();
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(',')[1]);
    reader.onerror = reject;
    reader.readAsDataURL(blob);
  });
}

async function addImageToSheetJS() {
  const wb = XLSX.utils.book_new();
  const ws = XLSX.utils.aoa_to_sheet([[ 'ID', 'Image' ]]);

  const imageData = await getImageBase64('https://example.com/image.png');
  ws['!merges'] = [{ s: { c: 1, r: 1 }, e: { c: 1, r: 5 } }];
  ws['B2'] = { t: 's', v: imageData, l: { Target: 'base64 image' } };

  XLSX.utils.book_append_sheet(wb, ws, 'Sheet 1');
  XLSX.writeFile(wb, 'SheetWithImages.xlsx');
}

addImageToSheetJS();

ক্রোম এক্সটেনশনের জন্য এক্সেল ফাইলগুলিতে ইমেজ এম্বেডিং অপ্টিমাইজ করা

যখন একটি উন্নয়নশীল ক্রোম এক্সটেনশন যেটি এক্সেল ফাইলগুলিতে ছবিগুলিকে একীভূত করে, একটি বড় চ্যালেঞ্জ হল কিভাবে একটি ব্রাউজার পরিবেশের মধ্যে ইমেজ এম্বেডিং পরিচালনা করা যায়। প্রথাগত Node.js পরিবেশের বিপরীতে, Chrome এক্সটেনশনগুলি অতিরিক্ত নিরাপত্তা এবং কর্মক্ষমতা বিধিনিষেধের সাথে আসে যা নির্দিষ্ট API-এ সরাসরি অ্যাক্সেসকে বাধা দেয়। এর মানে হল Axios-এর মতো লাইব্রেরি ব্যবহার করে ছবি আনার মতো পদ্ধতিতে ব্রাউজার নীতি মেনে চলার জন্য বিকল্পের প্রয়োজন হতে পারে।

ব্রাউজার পরিবেশের জন্য একটি সমাধান ব্যবহার করা জড়িত হতে পারে বেস64 কাঁচা বাইনারি ডেটার পরিবর্তে এনকোড করা ছবি। Base64 এনকোডিং ইমেজগুলিকে সহজেই স্থানান্তরিত এবং একটি স্ট্রিং হিসাবে সংরক্ষণ করার অনুমতি দেয়, যা তারপরে SheetJS এর ​​মত লাইব্রেরি ব্যবহার করে সরাসরি একটি এক্সেল শীটে এম্বেড করা যেতে পারে। এই ক্ষেত্রে, base64 এনকোডিং Chrome দ্বারা আরোপিত নিরাপত্তা সীমাবদ্ধতা কাটিয়ে উঠতে সাহায্য করে, বিশেষ করে যেহেতু এক্সটেনশন Node.js-নির্দিষ্ট কোড চালাতে পারে না।

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

জাভাস্ক্রিপ্টের সাথে এক্সেলে ছবি এম্বেড করার সাধারণ প্রশ্ন

  1. আমি কিভাবে একটি Chrome এক্সটেনশন পরিবেশে ছবি আনতে পারি?
  2. একটি Chrome এক্সটেনশনে, আপনি ব্যবহার করতে পারেন fetch() একটি URL থেকে ছবি পুনরুদ্ধার এবং ব্যবহার করে base64 এ রূপান্তর করতে FileReader এমবেডিংয়ের জন্য।
  3. বড় ফাইলের আকার এড়ানোর জন্য চিত্রগুলি কী বিন্যাসে হওয়া উচিত?
  4. এটি ব্যবহার করার পরামর্শ দেওয়া হয় WebP বা JPEG ফর্ম্যাটগুলি, কারণ তারা আরও ভাল কম্প্রেশন অফার করে এবং চূড়ান্ত এক্সেল ফাইলের আকার হ্রাস করে।
  5. একক এক্সেল ফাইলে একাধিক ছবি এম্বেড করা কি সম্ভব?
  6. হ্যাঁ, লাইব্রেরি ব্যবহার করে ExcelJS বা SheetJS, আপনি ইমেজ URL-এর একটি অ্যারের মাধ্যমে লুপ করে বিভিন্ন কক্ষে একাধিক ছবি এম্বেড করতে পারেন।
  7. Node.js এবং একটি ব্রাউজারে ছবি এম্বেড করার মধ্যে পার্থক্য কী?
  8. Node.js এ, আপনি ব্যবহার করতে পারেন axios.get() একটি ব্রাউজারে থাকাকালীন ইমেজ ডেটা আনতে, আপনাকে ব্যবহার করতে হবে fetch() এবং CORS নীতিগুলি সঠিকভাবে পরিচালনা করুন।
  9. কিভাবে আমি নিশ্চিত করব যে এক্সেল কক্ষে চিত্রগুলি সঠিকভাবে পুনরায় আকার দেওয়া হয়েছে?
  10. ব্যবহার করুন row.height এবং addImage() কোষের মাত্রা নিয়ন্ত্রণ করার ফাংশন যেখানে ছবি এমবেড করা হয়, সঠিক প্রদর্শন নিশ্চিত করে।

এক্সেল এ এমবেডিং ইমেজ সম্পর্কে চূড়ান্ত চিন্তা

এক্সেল সেল ব্যবহার করে সরাসরি ইমেজ এম্বেড করা জাভাস্ক্রিপ্ট সঠিক টুলস এবং লাইব্রেরি প্রয়োজন, যেমন ExcelJS, বিশেষ করে যখন একটি Chrome এক্সটেনশন পরিবেশের মধ্যে কাজ করে। এটি আপনাকে আরও গতিশীল এবং দৃশ্যত সমৃদ্ধ এক্সেল ফাইল তৈরি করতে দেয়।

অপ্টিমাইজ করা কৌশলগুলির মাধ্যমে যেমন বাইনারি ফরম্যাটে ইমেজ ডেটা আনা এবং সরাসরি কক্ষগুলিতে এম্বেড করা, এই পদ্ধতিটি নিশ্চিত করে যে আপনার তৈরি করা এক্সেল ফাইলগুলি কার্যকরী এবং দৃশ্যত আবেদনময়ী, ওয়েব ডেভেলপমেন্ট এবং এর বাইরেও বিভিন্ন ব্যবহারের ক্ষেত্রে পূরণ করে৷

তথ্যসূত্র এবং অতিরিক্ত সম্পদ
  1. এক্সেল ফাইলগুলি তৈরি এবং ম্যানিপুলেট করার জন্য কীভাবে এক্সেলজেএস ব্যবহার করবেন সে সম্পর্কে আরও বিস্তারিত ডকুমেন্টেশনের জন্য, দেখুন এক্সেলজেএস অফিসিয়াল ডকুমেন্টেশন .
  2. JavaScript-এ Axios ব্যবহার করে ইউআরএল থেকে কীভাবে ছবি আনতে হয় তা বোঝার জন্য দেখুন Axios ডকুমেন্টেশন .
  3. এক্সেল ফাইলগুলিতে এম্বেড করার জন্য জাভাস্ক্রিপ্টে বেস 64 ইমেজ এনকোডিংয়ের সাথে কাজ করার তথ্যের জন্য, চেক আউট করুন MDN ওয়েব ডক্স: FileReader.readAsDataURL .
  4. আপনি যদি একটি ক্রোম এক্সটেনশন ডেভেলপ করেন এবং এপিআই ব্যবহারের বিষয়ে নির্দেশিকা প্রয়োজন, তাহলে দেখুন ক্রোম এক্সটেনশন ডেভেলপার গাইড .