হাইপারলিংকড সেল থেকে লিঙ্কের পাঠ্য এবং URL টি বের করুন Ext


17

ধরুন আমার A1 সেলটিতে হাইপারলিংক রয়েছে: =hyperlink("stackexchange.com", "Stack Exchange")

শীটের অন্য কোথাও, আমার কাছে এমন সূত্রগুলি থাকতে চাই যা এ 1 থেকে লিঙ্ক পাঠ্য এবং URL আলাদাভাবে পান get আমি কেবল লিঙ্ক পাঠ্য পেতে একটি উপায় খুঁজে পেয়েছি:

=""&A1 

(খালি স্ট্রিং সহ কনটেন্টেশন)। এটি লিঙ্কযুক্ত "স্ট্যাক এক্সচেঞ্জ" প্রদান করে।

কীভাবে ইউআরএল পাবেন (স্ট্যাকেক্সচেঞ্জ.কম)?


1
এখানে এটি করতে পারে এমন একটি স্ক্রিপ্ট এখানে রয়েছে: productforums.google.com/forum/#!topic/docs/ymxKs_QVEbs
Yisroel Tech

3
দর্শনার্থীদের জন্য নোট: আপনি যদি এমন কোনও ফর্ম্যাট লিঙ্ক থেকে URL টি বের করার কোনও উপায় সন্ধান করছেন যা একটি নয় =hyperlink()(এমন কিছু যা শীটতে আটকানো হয়েছিল) তবে ক্ষমা করুন: একটি নেই। শুরুতে স্প্রেডশিটে সমৃদ্ধ পাঠ্য না আটকানো ভাল।


1
দর্শকদের জন্য দ্রষ্টব্য 2: আপনি এইচটিএমএলে স্প্রেডশিটটি ডাউনলোড করলে আপনি সেগুলি উভয়ই পেতে পারেন। বা বরং, তারা সহজেই এইচটিএমএল থেকে নিষ্কাশনযোগ্য .... আদর্শ নয়, তবে এটি একটি উপায়।
অ্যালবার্ট

উত্তর:


10

রুবনের উত্তর দেখার পরে আমি নিম্নলিখিত বৈশিষ্ট্যগুলি সহ এই কাজের জন্য একটি পৃথক কাস্টম ফাংশন লেখার সিদ্ধান্ত নিয়েছি:

  1. প্যারামিটারটি একটি স্ট্রিং হিসাবে নয়, একটি পরিসীমা হিসাবে সরবরাহ করা হয়: এটি =linkURL(C2)পরিবর্তে =linkURL("C2")। এটি প্যারামিটারগুলি সাধারণত কীভাবে কাজ করে তার সাথে সামঞ্জস্যপূর্ণ এবং উল্লেখগুলি আরও শক্তিশালী করে তোলে: উপরে যদি কেউ একটি নতুন সারি যুক্ত করে তবে সেগুলি বজায় রাখা হবে।
  2. অ্যারেগুলি সমর্থিত: এই সীমাতে পাওয়া =linkURL(B2:D5)সমস্ত hyperlinkকমান্ডের ইউআরএলগুলি (এবং অন্যান্য জায়গার জন্য ফাঁকা ঘর) প্রদান করে।

1 অর্জন করতে, আমি শীটটি দিয়ে পাস হওয়া যুক্তিটি ব্যবহার করি না (যা টার্গেট সেলটির পাঠ্য সামগ্রী হবে), তবে পরিবর্তে সূত্রটি বিশ্লেষণ করুন =linkURL(...)এবং সেখান থেকে পরিসীমা চিহ্নিতকরণ বের করুন।

/** 
 * Returns the URL of a hyperlinked cell, if it's entered with hyperlink command. 
 * Supports ranges
 * @param {A1}  reference Cell reference
 * @customfunction
 */
function linkURL(reference) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var args = formula.match(/=\w+\((.*)\)/i);
  try {
    var range = sheet.getRange(args[1]);
  }
  catch(e) {
    throw new Error(args[1] + ' is not a valid range');
  }
  var formulas = range.getFormulas();
  var output = [];
  for (var i = 0; i < formulas.length; i++) {
    var row = [];
    for (var j = 0; j < formulas[0].length; j++) {
      var url = formulas[i][j].match(/=hyperlink\("([^"]+)"/i);
      row.push(url ? url[1] : '');
    }
    output.push(row);
  }
  return output
}

কিছুটা ধীর গতির হলেও উজ্জ্বলতার সাথে কাজ করে।
ড্যানিড

এটি প্রযুক্তিগতভাবে কাজ করে তবে আমি ভাবছি linkURL()ফলাফলের ভিত্তিতে একটি নতুন হাইপারলিঙ্ক তৈরি করা সম্ভব কিনা । যেমন =HYPERLINK(linkURL(C2),"new label")আমার জন্য কাজ করে না বলে মনে হচ্ছে।
স্কুব

1
@ এসকিউব এটি কীভাবে আমি এই ফাংশনটি কোড করেছিলাম তার একটি পার্শ্ব প্রতিক্রিয়া: এটি কেবল নিজেরাই ব্যবহার করা যেতে পারে, অন্যদের সাথে একত্রিত হয় না। =hyperlink(D2, "new label")D2- এর লিঙ্ক URL টি সূত্র রয়েছে সে হিসাবে আপনি এখনও একটি নতুন হাইপারলিঙ্ক তৈরি করতে পারেন । বিকল্পভাবে, রুবনের কাস্টম ফাংশনটি ব্যবহার করুন।

3

সংক্ষিপ্ত উত্তর

একটি ঘর সূত্রের মধ্যে উদ্ধৃত স্ট্রিংটি পেতে একটি কাস্টম ফাংশন ব্যবহার করুন।

কোড

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

/** 
 * Extracts the first text string in double quotes in the formula
 * of the referred cell
 * @param {"A1"}  address Cell address.
 * @customfunction
 */
function FirstQuotedTextStringInFormula(address) {
  // Checks if the cell address contains a formula, and if so, returns the first
  // text  string in double quotes in the formula.
  // Adapted from https://productforums.google.com/d/msg/docs/ymxKs_QVEbs/pSYrElA0yBQJ

  // These regular expressions match the __"__ prefix and the
  // __"__ suffix. The search is case-insensitive ("i").
  // The backslash has to be doubled so it reaches RegExp correctly.
  // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp

  if(address && typeof(address) == 'string'){

    var prefix = '\\"';
    var suffix = '\\"';
    var prefixToSearchFor = new RegExp(prefix, "i");
    var suffixToSearchFor = new RegExp(suffix, "i");
    var prefixLength = 1; // counting just the double quote character (")

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var cell, cellValue, cellFormula, prefixFoundAt, suffixFoundAt, extractedTextString;

    cell = ss.getRange(address);
    cellFormula = cell.getFormula();

    // only proceed if the cell contains a formula
    // if the leftmost character is "=", it contains a formula
    // otherwise, the cell contains a constant and is ignored
    // does not work correctly with cells that start with '=
    if (cellFormula[0] == "=") {

      // find the prefix
      prefixFoundAt = cellFormula.search(prefixToSearchFor);
      if (prefixFoundAt >= 0) { // yes, this cell contains the prefix
        // remove everything up to and including the prefix
        extractedTextString = cellFormula.slice(prefixFoundAt + prefixLength);
        // find the suffix
        suffixFoundAt = extractedTextString.search(suffixToSearchFor);
        if (suffixFoundAt >= 0) { // yes, this cell contains the suffix
          // remove all text from and including the suffix
          extractedTextString = extractedTextString.slice(0, suffixFoundAt).trim();

          // store the plain hyperlink string in the cell, replacing the formula
          //cell.setValue(extractedTextString);
          return extractedTextString;
        }
      }
    } else {
      throw new Error('The cell in ' + address + ' does not contain a formula');
    }
  } else {
    throw new Error('The address must be a cell address');
  }
}

1
এই ফাংশনটি আমার পক্ষে ভাল, কারণ এটি অন্যান্য অভিব্যক্তির অভ্যন্তরে ব্যবহার করা যেতে পারে। উপায় দ্বারা এটি ঘরে address "A1" ation স্বরলিপিটি ব্যবহার করে স্বরলিপিটি ব্যবহার করে।
ওয়াটাওয়ালে

2

সেল ধরে নেওয়া যাক হয়েছে হাইপারলিঙ্ক funciton;

কেবলমাত্র =hyperlink"হাইপারলিঙ্ক" বা "xyz" এ প্রতিস্থাপন করুন

তারপরে তাদের আলাদা করার জন্য আপনাকে কিছু তথ্য পরিষ্কার করতে হবে। কলাম বা =splitফাংশনে বিভক্ত পাঠ্য ব্যবহার করে দেখুন । উভয়ই ,একটি সীমানা হিসাবে ব্যবহার করবে ।

আবার "[ডাবল উক্তি] [কিছুই না] এর সাথে প্রতিস্থাপন করুন

এই ভাবে উপায় সহজ বলে মনে হচ্ছে ..

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.