EM_Y Ответов: 2

Сравнение 2 ячеек из одного столбца в определенном столбце экспортированного листа excel с использованием WPF


Мне нужно экспортировать MySQL dataTable с помощью wpf в лист Excel, что и делается .

Я хочу сравнить ячейку 1 "A1" с ячейкой 2 "A2" в конкретном столбце A и удалить вторую, если она имеет то же значение, что и первая .

Моя проблема заключается в том,что код сравнивает все ячейки столбца A,B,C, D, в то время как я хочу сравнить только в 1 конкретном столбце A !


Спасибо вам за помощь .

Что я уже пробовал:

это только код экспорта :

private void export_Click(object sender, RoutedEventArgs e)
        {
            using (var conx = new MySqlConnection(constring))
            {
                conn.Open();
 
            //// extraction excel 
 
            string Mysql = null;
            string data = null;
            int i = 0;
            int j = 0;
 
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
 
            object misValue = System.Reflection.Missing.Value;
 
            xlApp = new Excel.Application();
            xlApp.Visible = true;
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
 

            Mysql = "SELECT * from database.Table";
 
            MySqlDataAdapter cmd = new MySqlDataAdapter(Mysql,conn);
            DataSet ds = new DataSet();
            cmd.Fill(ds);
 
            for (i = 0; i <= ds.Tables[0].Rows.Count-1 ; i++)
            {
                for (j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
                {
                    data = ds.Tables[0].Rows[i].ItemArray[j].ToString();
                 
                      /// excel sheet start from A5
                    xlWorkSheet.Cells[ i+5, j+1] = data;
 

                }
 
            }
           }
 
           }



и я добавил этот сравнительный код в свой цикл экспорта :

for (i = 0; i <= ds.Tables[0].Rows.Count-1 ; i++)
        {
            for (j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
            {
                data = ds.Tables[0].Rows[i].ItemArray[j].ToString();

                xlWorkSheet.Cells[ i+1, j+1] = data;

           //// My added comparing code
            try
                {

           if (xlWorkSheetCarteProd.Cells[i, j].Value ==

              xlWorkSheetCarteProd.Cells[i + 1, j].Value)
                    {
                        xlWorkSheetCarteProd.Cells[i +1, j].Value = "";

                    }
                }
                catch{ }
             ////////////////
            }

        }

2 Ответов

Рейтинг:
2

F-ES Sitecore

Ваш код сравнения находится внутри цикла "per column", поэтому он выполняется для каждого столбца. Если вас интересует только первый столбец, то выведите его из этого цикла

for (j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
{
    data = ds.Tables[0].Rows[i].ItemArray[j].ToString();
                    
    xlWorkSheet.Cells[ i+1, j+1] = data;
}
 
// using a hard-coded value of 0 for the first column
try   
{
    if (xlWorkSheetCarteProd.Cells[i, 0].Value == 
         xlWorkSheetCarteProd.Cells[i + 1, 0].Value)
    {
        xlWorkSheetCarteProd.Cells[i +1, 0].Value = "";
     }
}
catch{ }


EM_Y

@F-ES
Спасибо ,но это не работает для меня, я пытался играть в код, ссылаясь на ваше предложение, но это тоже не работает ,
и ошибка показывает: исключение из HRESULT: 0x800A03EC
Это значит, что excel не нашел никакого результата !

EM_Y

Он работает, когда и внутри цикла j=1 ,
он работает, но сравнивает только 2 первые строки .
Моя цель состоит в том ,чтобы удалить ячейку повторяющихся текстов в столбце А и позволить первой копии, в то время как мой лист данных excel начинается с A5 .
Я желаю вашей помощи ! Спасибо

Рейтинг:
11

Patrice T

Я думаю, что проблема заключается в том, что строки и столбцы ячеек Excel начинаются с 1, а не с нуля.
Добавьте 1 к каждой строке и столбцу в вашем сравнении, и это должно сделать трюк.


EM_Y

Вы правы насчет j=1 ,
он работает, но сравнивает только 2 первые строки .
Моя цель состоит в том ,чтобы удалить ячейку повторяющихся текстов в столбце А и позволить первой копии, в то время как мой лист данных excel начинается с A5 .
Я желаю вашей помощи ! Спасибо

Patrice T

Вы должны добавить пример ввода и желаемый результат

EM_Y

@ppolymorphe

Я экспортировал таблицу MySQL в excel с помощью wpf ,
мой лист excel начинается с позиции ячейки A5,
Строки первого столбца могут иметь одинаковое значение .
Я хочу позволить первому значению и удалить содержимое остальной ячейки, которое имеет то же значение .

код, который я пробовал, сравнивал row1col1 и row2Col1, и если он имел одно и то же значение , row2col2 будет удален, а затем перейдет к row3col1 и сравнит его с row4 и т. д...
Скрыть   скопировать код

try { if (xlWorkSheetCarteProd.Cells[i,1].Value==xlWorkSheetCarteProd.Cells[i + 1, 1].Value) {         xlWorkSheetCarteProd.Cells[i +1, 1].Value = "";        }} catch{ }

Жаль, что я не объяснил это хорошо ?

Спасибо за внимание .