রঙ বিন্যাস সহ সেল রেফারেন্স


16

গুগল শিটগুলিতে কোনও সেলকে উল্লেখ করা কি এমনভাবে প্রদর্শিত হবে যেখানে এটি প্রদর্শিত হবে এমন ঘরটি একই পাঠ্য এবং সেল রঙিন বিন্যাস ব্যবহার করে এটি প্রদর্শন করে?

=A1

কেবলমাত্র সেলটির মান উল্লেখ করবে। তবে যদি সেই নির্দিষ্ট কক্ষে লাল পটভূমি এবং সাদা পাঠ্য থাকে তবে আমি এটিও অনুলিপি করতে চাই।

আমি স্ক্রিপ্টগুলির চেয়ে বিদ্যমান সূত্র সমাধানগুলির দিকে ঝুঁকছি। অবশ্যই প্রযোজ্য।


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

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

1
রবার্ট, গুগল স্প্রেডশিট এবং মাইক্রোসফ্ট এক্সেল (2010) এর মধ্যে অনেকগুলি পার্থক্য রয়েছে। আমি যে উত্তর দিয়েছি তা দেখুন: webapps.stackexchange.com/a/44719/29140
জ্যাকব জানু

1
@ জ্যাকবজানটুইনস্ট্রা: সুতরাং আমার অনেকগুলি সেই 85% লোকের কথা উল্লেখ করছে। এটি প্রমাণ করে যে এটি এক্সেলের বেশিরভাগ সূত্রকে কভার করে। :) এবং লিঙ্ক পোস্ট করার জন্য ধন্যবাদ। দুর্দান্ত অন্তর্দৃষ্টি।
রবার্ট কোরিটনিক

উত্তর:


8

গুগল স্প্রেডশিটগুলির জন্য, কোনও স্ক্রিপ্ট লিখে এটি সম্ভব:

function copyValuesAndFormatting() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet();

    var fromRange = sheet.getRange("A2:A");
    var toRange = sheet.getRange("B2:B");
    var values = fromRange.getValues();
    var fontColors = fromRange.getFontColors();
    var backgrounds = fromRange.getBackgrounds();
    var fonts = fromRange.getFontFamilies();
    var fontWeights = fromRange.getFontWeights();
    var fontStyles = fromRange.getFontStyles();

    toRange.setBackgrounds(backgrounds);
    toRange.setFontColors(fontColors);
    toRange.setValues(values);
    toRange.setFontFamilies(fonts);
    toRange.setFontWeights(fontWeights);
    toRange.setFontStyles(fontStyles);
}

স্ক্রিপ্ট ফাংশনের জন্য একটি ট্রিগার যুক্ত করুন , যাতে এটি প্রতিটি স্প্রেডশিট সংশোধন করে চলে।

আমি এখানে একটি নমুনা স্প্রেডশিট তৈরি করেছি । এটিকে আপনার নিজের অ্যাকাউন্টে অনুলিপি করতে অনিচ্ছুক, এবং এটির সাথে পরীক্ষা শুরু করুন।


আমি আমার প্রশ্নের মধ্যে এটি পরিষ্কারভাবে বর্ণনা করি নি, তবে আমি বিদ্যমান সূত্রগুলির দিকে চেয়ে বেশি ছিলাম এবং স্ক্রিপ্টগুলির দিকে চেয়ে ছিল না। যদি এই কাজটি করার জন্য কোনও সূত্রের সংমিশ্রণ না থাকে তবে আপনার স্ক্রিপ্টটি আরও ভাল হতে পারে যদি এটি সূত্র হিসাবে ডাকা হয় fullCellRef(cellReference)তবে এটি একে =fullCellRef(A1)উদাহরণ হিসাবে ব্যবহার করতে পারে
রবার্ট কোরিটনিক

আহ আমি দেখি. তবে আমি মনে করি না ( ফর্ম্যাটিং নির্দিষ্ট করে এমন কোনও সূত্র আছে যা আমি ভুল হলে আমাকে সংশোধন করি) ।
ভিদার এস রামদল

আমি আপনাকে সংশোধন করব যদি আমি নির্ধারিতভাবে আমার প্রশ্নটি জানতাম। :) কিন্তু অন্যথায়. আমি সন্দেহ করি যে যাই হোক না কেন। সুতরাং আপনি যদি আপনার স্ক্রিপ্টটি সেল সূত্র হিসাবে ব্যবহার করার জন্য পুনরায় লেখেন তবে আমি আপনার উত্তরটি গ্রহণ করব কারণ এটি বৈশিষ্ট্যগুলি হস্তে সেরা সমাধান হতে পারে।
রবার্ট কোরিটনিক

1
হুম, আমি বর্তমানে জানি না যে কোনও সেল সূত্র ফাংশন কীভাবে সেখান থেকে ব্যবহৃত সেলটি রেফারেন্স করতে পারে, যা ফর্ম্যাটিং সেট করার জন্য প্রয়োজনীয় necessary আমি কিছু গবেষণা করব।
ভিদার এস রামদল

না, দুঃখিত, এটি অসম্ভব বলে মনে হচ্ছে। একটি সূত্র ফাংশনে সেল ফর্ম্যাটিং সেট করার অ্যাক্সেস নেই। সুতরাং আমি আপনাকে ট্রিগার বিকল্প দিয়ে ছেড়ে যেতে হবে।
ভিদার এস রামদল

5

ভিডার এবং জ্যাকব এর উত্তরগুলিকে একটি ভিত্তি হিসাবে ব্যবহার করে আমি নিম্নলিখিত সমাধান তৈরি করেছি যা আপনাকে = ফুলসেলআরফ (এ 1) লিখতে সক্ষম করবে যা এ 1 থেকে মান এবং ফর্ম্যাটটি অনুলিপি করবে।

একটি ক্ষুদ্রতর পার্শ্ব প্রতিক্রিয়া হ'ল আপনি যদি এই সূত্রটি দিয়ে কোনও ঘর টানুন-অনুলিপি করেন তবে নতুন ঘরগুলি প্রাথমিকভাবে মূল কক্ষের বিন্যাসটি অনুলিপি করবে (সাধারণ হিসাবে) তবে তারপরে একটি ছোট বিরতির পরে রেফারেন্সযুক্ত বিন্যাসে স্যুইচ করবে।

নমুনা শীট এখানে

/**
 * Dummy function to be the equivalent of using simple reference,
 * but is used to identify which cells to copy format.
 * The immediate effect of =fullCellRef(A1) is the same as =A1
 * 
 * @param  {string} value The value of the referred cell
 * @return {string}       The given value
 */
function fullCellRef(value){
  return value;
}

/**
 * For each cell with the formula eg B2=fullCellRef(A1), the format of
 * the referred cell (eg A1) is copied to the calling cell (eg B2)
 */
function copyFormatting() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getDataRange();
  var offsetRow = range.getRow() - 1;
  var offsetCol = range.getColumn() - 1;

  var formulas = range.getFormulas();

  var formats = {
    fontColors: range.getFontColors(),
    backgrounds: range.getBackgrounds(),
    fonts: range.getFontFamilies(),
    fontWeights: range.getFontWeights(),
    fontStyles: range.getFontStyles(),
    verticalAlignments: range.getVerticalAlignments(),
    horizontalAlignments: range.getHorizontalAlignments(),
    numberFormats: range.getNumberFormats()
  };
  var formulaIsUsed = false;
  for (var row = 0; row < formulas.length; row ++ ) {
    for (var column = 0; column < formulas[row].length; column ++ ) {
      var refersTo = findReferenceCells(formulas[row][column]);
      if (refersTo){
        formulaIsUsed = true;
        var refRow = refersTo.row - offsetRow;
        var refCol = refersTo.column - offsetCol;
        for (var key in formats) {
          formats[key][row][column] = formats[key][refRow][refCol];
        }
      }
    }
  }

  if (formulaIsUsed) {
    range.setBackgrounds(formats.backgrounds);
    range.setFontColors(formats.fontColors);
    range.setFontFamilies(formats.fonts);
    range.setFontWeights(formats.fontWeights);
    range.setFontStyles(formats.fontStyles); 
    range.setVerticalAlignments(formats.verticalAlignments);
    range.setHorizontalAlignments(formats.horizontalAlignments);
    range.setNumberFormats(formats.numberFormats);
  }

}

/**
 * Returns the 2D array indices to identify the referred cell.
 * @param  {string} formula The cell formula
 * @return {Array.integer}         The row and column array indices
 */
function findReferenceCells(formula) {
  if (formula === "") {
    return false;
  }
  var refPattern = /^=fullcellref\(([a-z]{1,2})(\d+)\)$/i;
  var matches = refPattern.exec(formula.replace(" ", ""));
  matches.shift();
  if (!matches) {
    return false;
  }
  // convert cell reference to array indices
  var column = colToInteger(matches[0]) - 1;
  var row = matches[1] - 1;

  return {row: row, column: column};
}

/**
 * Converts a column name to a column number
 * @param  {string} columnName eg "A", "BB"
 * @return {integer}            Between 1 and 256
 */
function colToInteger(columnName){
  var nameParts = columnName.toLowerCase().split();
  //97 is char code of "a", but we need 1 based indices
  var colNum = nameParts.pop().charCodeAt(0) - 96;
  if (nameParts.length === 1){
    colNum += 26 * (nameParts.pop().charCodeAt(0) - 96);
  }
  return colNum;
}

টমের স্ক্রিপ্টের জন্য 52 এবং 53 লাইনে একটি ত্রুটি রয়েছে। কেউ এটিকে সঠিকভাবে সম্পাদন করতে সহায়তা করতে পারে।

@ স্বপনিলগোসাবি - অতিরিক্ত ফর্ম্যাটগুলি অন্তর্ভুক্ত করার জন্য আমি কোডটি আপডেট করেছি এবং এটি সঠিকভাবে চলতে পারে বলে মনে হচ্ছে। আপনার যদি এখনও সমস্যা থাকে তবে আমাকে জানতে দিন
টম হরউড

এটি বেশ দুর্দান্ত। যাইহোক, আমি উত্স কোডটি পড়ার সাথে সাথে, এটি ট্যাবগুলি জুড়ে কাজ করবে না, তাই না?
জেড

@ জেড - না - এটি ট্যাবগুলিতে কাজ করবে না। এটি সম্ভবত এটি করার জন্য তৈরি করা যেতে পারে, যদিও আমি সত্যিই এটিতে সন্ধান করি নি।
টম হোরউড

3

সূত্র অনুভূতি থাকার ক্ষেত্রে এটি আপনি পেতে পারেন।

কোড

function onEdit(e) {
  var sh = e.source.getActiveSheet();
  var aCell = sh.getActiveCell(), value = aCell.getValue();

  // get formatting
  var fontColor = aCell.getFontColor();
  var background = aCell.getBackground();
  var font = aCell .getFontFamily();
  var fontWeight = aCell.getFontWeight();
  var fontStyle = aCell.getFontStyle();
  var target = Browser.inputBox('Give column number, relative to active cell', 
    Browser.Buttons.OK);
  var tCell = aCell.offset(0,parseInt(target));

  // set formatting
  tCell.setBackground(background).setFontColor(fontColor).setFontFamily(font)
    .setFontWeight(fontWeight).setFontStyle(fontStyle).setValue(value);
}

ব্যাখ্যা

সম্পাদনা করার পরে, একটি বার্তা বাক্স উপস্থিত হয় এবং একটি ইনপুট মান জিজ্ঞাসা করে (বিয়োগের পাশাপাশি অনুমোদিত)। তারপরে বিন্দুর (মান অন্তর্ভুক্ত) বিদআর আশ্চর্যজনকভাবে ইতিমধ্যে উপস্থাপিত হিসাবে প্রয়োগ করা হয়েছে।

উদাহরণ

ভিডারের ফাইলটি অনুলিপি করা হয়েছে: ঘর বিন্যাসকরণ


শান্ত! সম্ভবত আপনি নিজের ট্রিগারটি 'সম্পাদনা চলাকালীন' পরিবর্তে 'পরিবর্তনের উপর' হিসাবে নিবন্ধভুক্ত করতে পারেন। সুতরাং, কেবলমাত্র ফর্ম্যাট পরিবর্তনগুলিও প্রচার করবে।
ভিদার এস রামদাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.