Как получить, если значение ячейки Excel пусто в C # - PullRequest
0 голосов
/ 04 ноября 2019

Итак, я делаю простое приложение для отслеживания времени на работе, оно сканирует штрих-код, когда вы регистрируетесь, и снова для проверки, рассчитывает часы, а затем сохраняет их в .xml. Дело в том, что это работает в зависимости от дня, но вы можете регистрироваться и выходить чаще, чем раз в день (например, если вы работаете утром и днем). Поэтому мне нужен код, чтобы проверить, является ли значение конкретной ячейки пустым, если оно просто сохраняет часы, если оно не пустое, то оно получает значение ячейки и добавляет новые часы, рассчитанные за это время. Мой код выглядит следующим образом.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace LCB
{

    public partial class Form1 : Form
    {
        string name;
        DateTime T_Entrada;
        DateTime T_Salida;
        TimeSpan Horas;
        public float nhoras;
        bool B_Entrada;

        public Form1()
        {
            InitializeComponent();
            B_Entrada = false;           
            textBox4.Text = B_Entrada.ToString();
        }


        //ESCIBIR EN EXCEL CODIGOO
        public void WriteSample()
        {
 if (name == "Paco")
                {

                  if(excelWorksheet.Cells[4,System.DateTime.Today.Day].Value2 == null)
                    {
                        excelWorksheet.Cells[4, System.DateTime.Today.Day].Value2 = nhoras;
                    }
                    else
                    {
                        excelWorksheet.Cells[4, System.DateTime.Today.Day].Value2 += nhoras; 
                    }
                    excelApp.ActiveWorkbook.SaveAs(@"C:\Users\PRACTICVAS\Desktop\" + System.DateTime.Today.Month + ".xls", Excel.XlFileFormat.xlWorkbookNormal);
                }
                excelWorkbook.Close();
                excelApp.Quit();
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelWorksheet);
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelWorkbook);
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelApp);
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }

name - это строка, используемая на данный момент для проверки каждого отдельного человека, так что дело в том, что он не проверяет, является ли значение ячейки нулевым или нет, и всегда сохраняет новоезначение для nhoras, которое является количеством часов после каждой проверки. Есть идеи?

1 Ответ

0 голосов
/ 04 ноября 2019

Если вы хотите избежать навигации по всем различным значениям, которые могут возвращать Range.Value и Range.Value2, проще просто прочитать свойство Text. Возвращает string, содержащий видимое содержимое ячейки. Если это пустая строка, ячейка не содержит значения. Это никогда не равно нулю.

if(excelWorksheet.Cells[4,System.DateTime.Today.Day].Text == string.Empty)

или

if(excelWorksheet.Cells[4,System.DateTime.Today.Day].Text.Length == 0)

Предполагается, что проверяемая ячейка никогда не будет содержать формулу, которая возвращает пустую строку.

Предположим, что ячейка содержит

=""

Тогда свойство .Text вернет пустую строку, но ячейка на самом деле не пуста. В очень маловероятном случае, что вам придется учитывать это, вы также хотели бы убедиться, что свойство .Formula также возвращает пустую строку.

Для простоты вы могли бы написать такую ​​функцию, как:

bool IsEmptyCell(Range cell)
{
    return cell.Text.Length == 0 && cell.Formula.Length == 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...