"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पंक्तियों को फ़िल्टर करने के मानदंड का उपयोग करके Google शीट में घंटे कैसे जोड़ें?

पंक्तियों को फ़िल्टर करने के मानदंड का उपयोग करके Google शीट में घंटे कैसे जोड़ें?

2024-08-22 को प्रकाशित
ब्राउज़ करें:437

हे लोगों! आज मैं एक बेहद उपयोगी स्क्रिप्ट साझा करना चाहता हूं जो मैंने रोजमर्रा की एक सामान्य समस्या को हल करने के लिए बनाई थी।

यदि आपने कभी Google शीट में "अवधि" जोड़ने का प्रयास किया है, तो आपने देखा होगा कि SUMIF और SUMIFS सूत्र विशिष्ट मानदंडों के आधार पर ईवेंट या उत्पाद अवधि जोड़ने के लिए काम नहीं करते हैं। आपको जिस प्रकार की गणना करने की आवश्यकता है उसके आधार पर यह एक बाधा हो सकती है। लेकिन घबराना नहीं! Google शीट आपको जावास्क्रिप्ट स्क्रिप्ट बनाने और उन्हें कस्टम फ़ार्मुलों के रूप में उपयोग करने की सुविधा देता है।

अपनी स्क्रिप्ट में, मैंने दो भिन्नताएँ बनाईं: पहला एक मानदंड को स्वीकार करता है और दूसरा दो तक। मैं भविष्य में इस फ़ंक्शन को और अधिक लचीला बनाने के लिए इसमें सुधार करने की योजना बना रहा हूं।

यह याद रखने योग्य है कि कस्टम सूत्र प्रोग्राम द्वारा सीधे गणना योग्य मान नहीं लौटाते हैं। इससे निजात पाने के लिए, आप परिणाम को =VALUE() फ़ंक्शन के साथ लपेट सकते हैं। फिर, बस डेटा प्रकार के अनुरूप फ़ॉर्मेटिंग लागू करें - हमारे मामले में, "अवधि"। स्क्रिप्ट जांचने के लिए तैयार हैं?

परीक्षण के लिए सामान्य डेटा बनाना

सबसे पहले, आइए सूत्र का परीक्षण करने के लिए डेटा तैयार करें। मैंने इसके लिए हमारे मित्र GPT का उपयोग किया।

शीर्षक अवधि वर्ग स्थिति
द मार्टियन 01:00:00 पतली परत मैं इसे पहले ही देख चुका हूं
इंटरस्टेलर 02:49:00 पतली परत मैं इसे पहले ही देख चुका हूं
जॉन विक 01:30:00 पतली परत मैं इसे पहले ही देख चुका हूं
एवेंजर्स: एंडगेम 03:00:00 पतली परत मैं देखना चाहता हूं
अजनबी चीजें 00:45:00 शृंखला उपस्थित होना
जादूगर 01:00:01 शृंखला उपस्थित होना
मंडलोरियन 00:40:00 शृंखला उपस्थित होना
ब्रेकिंग बैड 00:50:00 शृंखला मैं इसे पहले ही देख चुका हूं
द पेपर हाउस 00:55:00 शृंखला मैं देखना चाहता हूं
गेम ऑफ़ थ्रोन्स 01:10:00 शृंखला मैं देखना चाहता हूं

लिखी हुई कहानी

मैंने हर चीज़ को यथासंभव सर्वोत्तम रूप से प्रलेखित करने का प्रयास किया। मैंने इसे छोटे कार्यों में अलग करने और कोड की स्पष्टता बढ़ाने के लिए कुछ और घोषणात्मक उपयोग करने का निर्णय लिया।

function todosSaoArrays(...arrays) {
  return arrays.every(Array.isArray);
}

function todosArraysTemOMesmoTamanho(...arrays) {
  const lengths = arrays.map((arr) => arr.length);
  return lengths.every((val) => val === lengths[0]);
}

function converterHMSParaSegundos(hms) {
  // Quebra a string do formato HH:MM:SS em partes
  const partes = String(hms).split(":");

  // Converte as partes em números inteiros
  const [horas, minutos, segundos] = partes;

  // Converte horas e minutos para segundos e soma com os segundos
  const totalSegundos =
    Number(horas) * 3600   Number(minutos) * 60   Number(segundos);

  return Number(totalSegundos);
}

function converterSegundosParaHMS(segundos) {
  // Calcula o número de horas, minutos e segundos
  const horas = Math.floor(segundos / 3600);
  const minutos = Math.floor((segundos % 3600) / 60);
  const segundosRestantes = segundos % 60;

  // Adiciona zero à esquerda para garantir que tenha sempre dois dígitos
  const formatoHoras = String(horas).padStart(2, "0");
  const formatoMinutos = String(minutos).padStart(2, "0");
  const formatoSegundos = String(segundosRestantes).padStart(2, "0");

  // Retorna o formato HH:MM:SS
  return `${formatoHoras}:${formatoMinutos}:${formatoSegundos}`;
}

/**
 * Soma as horas baseado um critério.
 *
 * @param {string[]} intervalo_soma - Conjunto de intervalos de tempo em formato HH:MM:SS.
 * @param {number[]} intervalo_de_criterios - Conjunto de critérios correspondentes aos intervalos de tempo.
 * @param {number} criterio - O critério para o qual as horas devem ser somadas.
 * @returns {string} Soma das durações passadas, ou uma mensagem de erro.
 */
function somarHorasSe(intervalo_soma, intervalo_de_criterios, criterio) {
  if (!todosSaoArrays(intervalo_soma, intervalo_de_criterios))
    return "Passe os intervalos para o calculo!";

  if (!todosArraysTemOMesmoTamanho(intervalo_soma, intervalo_de_criterios))
    return "Os intervalos devem ter o mesmo tamanho";

  // Filtra os intervalos de tempo para o critério específico
  const horasParaSomar = intervalo_soma.filter(
    (linha, index) =>
      String(intervalo_de_criterios[index]).trim() == String(criterio).trim()
  );

  // Converte as horas filtradas para segundos
  const horasEmSegundos = horasParaSomar.map((n) =>
    converterHMSParaSegundos(n)
  );

  // Soma todos os segundos
  const somaDosSegundos = horasEmSegundos.reduce((acumulador, valorAtual) => {
    return acumulador   valorAtual;
  }, 0);

  // Converte o total de segundos de volta para o formato HH:MM:SS
  return converterSegundosParaHMS(somaDosSegundos);
}

/**
 * Soma as horas baseado em critérios.
 *
 * @param {string[]} intervalo_soma - Conjunto de intervalos de tempo em formato HH:MM:SS.
 * @param {number[]} intervalo_de_criterios1 -  Primeiro conjunto de critérios correspondentes aos intervalos de tempo.
 * @param {number} criterio1 - O primeiro critério para o qual as horas devem ser somadas.
 * @param {string[]} intervalo_de_criterios2 -  Segundo conjunto de critérios correspondentes aos intervalos de tempo.
 * @param {string} semestre - O segundo critério para o qual as horas devem ser somadas.
 * @returns {string} Soma das durações passadas, ou uma mensagem de erro.
 */
function somarHorasSe2(
  intervalo_soma,
  intervalo_de_criterios1,
  criterio1,
  intervalo_de_criterios2,
  criterio2
) {
  if (
    !todosSaoArrays(
      intervalo_soma,
      intervalo_de_criterios1,
      intervalo_de_criterios2
    )
  )
    return "Passe os intervalos para o calculo!";

  if (
    !todosArraysTemOMesmoTamanho(
      intervalo_soma,
      intervalo_de_criterios1,
      intervalo_de_criterios2
    )
  )
    return "Os intervalos devem ter o mesmo tamanho";

  // Filtra os intervalos de tempo para os critérios passados
  const horasParaSomar = intervalo_soma.filter(
    (linha, index) =>
      String(intervalo_de_criterios1[index]) == String(criterio1).trim() &&
      String(intervalo_de_criterios2[index]).trim() === String(criterio2).trim()
  );

  // Converte as horas filtradas para segundos
  const horasEmSegundos = horasParaSomar.map((n) =>
    converterHMSParaSegundos(n)
  );

  // Soma todos os segundos
  const somaDosSegundos = horasEmSegundos.reduce((acumulador, valorAtual) => {
    return acumulador   valorAtual;
  }, 0);

  // Converte o total de segundos de volta para o formato HH:MM:SS
  return converterSegundosParaHMS(somaDosSegundos);
}

का उपयोग कैसे करें?

मानदंड पाठ या संख्या हो सकता है, लेकिन समय को "सादा पाठ" के रूप में स्वरूपित किया जाना चाहिए।

Como somar horas no Google Sheets usando critérios para filtrar linhas?

स्क्रिप्ट ऐप पर जाएं:

Como somar horas no Google Sheets usando critérios para filtrar linhas?

स्क्रिप्ट और "CTRL S" चिपकाएँ। तैयार। इसका उपयोग करना मूल सूत्र के समान ही प्रक्रिया है।

एक बार फॉर्मूला लागू हो जाने के बाद, हम इसे उस प्रकार के रूप में मान सकते हैं जिसे प्रोग्राम VALUE का उपयोग करके समझता है, आपका कोड इस तरह दिखना चाहिए:

=VALUE(somarHorasSe2($C$2:$C$11;$D$2:$D$11;C$14;$E$2:$E$11;$B15))

यदि सब कुछ ठीक रहा, तो आपका परिणाम यह होना चाहिए:

Como somar horas no Google Sheets usando critérios para filtrar linhas?

यह सिर्फ एक टिप थी, मुझे आशा है कि आपको यह पसंद आई होगी, और यदि आपके पास सुझाव हैं, तो उन्हें टिप्पणी में छोड़ दें। आलिंगन.

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/casewinter/como-somar-horas-no-google-Sheets-usando-criterios-para-filtrar-linhas-364p?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग से संपर्क करें @163.com हटाएं
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3