shabzo1 Ответов: 1

Как удалить строки, если условие выполнено


Мне удалось решить одну проблему, но я застрял со вторым условием. первое условие проверяет, есть ли больше строк для отображения, и удаляет пустые строки. строка начинается с A21 и заканчивается на A121. второе условие-если их меньше 50, то удалить. этого не происходит.

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

int rowToDeleteFrom = rowsToStart + have;
if ((row + 1) % rowsToDisplay == 0)
{
    //int rowToDeleteFrom = rowsToStart + have;//have is datagridview .rows .count
    Excel.Range range = xlWorkSheet.get_Range("A" + rowToDeleteFrom, "A121");
    Excel.Range entireRow = range.EntireRow;
    entireRow.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp);


    cell++;
}
else
{
    cell++;
}


РЕДАКТИРОВАТЬ: Код добавлен из решения 1:
private void button1_Click(object sender, EventArgs e)
{
    int currentSheet = 1;
    Excel.Application xlApp = new Excel.Application();
    string filePath = @"C:\MyProdecData\testquote1.xltx";
    Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(filePath);
    Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(currentSheet); ;
    object misValue = System.Reflection.Missing.Value;
    
    
    string datestr = DateTime.Now.ToString("dd.MM.yyyy");
    string quote = txtName.Text.Replace(" ", " ");
    string filename = @"C:\MyProdecQuotes\";
    string myfile = filename + quote + "_" + datestr + ".xlsx";
    string salesman = txtEmail.Text.ToUpper();
    string customer = txtName.Text.ToUpper();
    string custname = txtCustName.Text.ToUpper();
    string delivery = txtDel.Text;
  
    int cell = 0;
    int rowsToDisplay = 30;
    
    int rowsToStart = 21;

    for (int row = 0; row < dataGridView1.Rows.Count - 1; row++)
    {
        int have = dataGridView1.Rows.Count;
        if (currentSheet <= xlWorkBook.Sheets.Count)
        {


            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(currentSheet);
        }


        xlWorkSheet.get_Range("F18", "H18").Value2 = salesman;
        xlWorkSheet.get_Range("B13", "D14").Value2 = customer;
        xlWorkSheet.get_Range("B15", "D15").Value2 = custname;
        xlWorkSheet.get_Range("H13", "K15").Value2 = delivery;
        xlWorkSheet.get_Range("A13", "D14").Font.Bold = true;
        //xlWorkSheet.get_Range("C12", "E12").Font.Bold = true;
        xlWorkSheet.get_Range("I3", "J3").Value2 = DateTime.Now;
        xlWorkSheet.get_Range("I5", "K5").Value2 = quote + "_" + datestr;



        for (int column = 0; column < dataGridView1.Columns.Count; column++)
        {
            if (column == 2 || column == 5)
            {
                xlWorkSheet.Cells[cell + rowsToStart, column + 1] = "'" + dataGridView1.Rows[row].Cells[column].Value.ToString().ToUpper();
            }
            else
            {
                xlWorkSheet.Cells[cell + rowsToStart, column + 1] = dataGridView1.Rows[row].Cells[column].Value.ToString().ToUpper();
            }

        }
        int rowToDeleteFrom = rowsToStart + have;
        if ((row + 1) % rowsToDisplay == 0)
        {
            //int rowToDeleteFrom = rowsToStart + have;//have is datagridview .rows .count
            Excel.Range range = xlWorkSheet.get_Range("A" + rowToDeleteFrom, "A121");
            Excel.Range entireRow = range.EntireRow;
            entireRow.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp);


            cell++;
        }
        else
        {
            
            cell++;
        }
           
        }

    
                
    if (System.IO.File.Exists(myfile))
    {
        System.IO.File.Delete(myfile);
    }

    //xlWorkBook.SaveAs(myfile, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
    xlWorkBook.SaveAs(myfile, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, System.Reflection.Missing.Value, misValue, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlUserResolution, true, misValue, misValue, misValue);
    xlWorkBook.Saved = true;
    xlWorkBook.Close(true, misValue, misValue);
    if (xlApp != null)
    {
        xlApp.Quit();
    }

    releaseObject(xlWorkSheet);
    releaseObject(xlWorkBook);
    releaseObject(xlApp);

    MessageBox.Show("Excel file created , CLICK on the Open quote button");
    {
        btn2.Show();

    }
}

Richard MacCutchan

Где находится код, который тестирует менее чем на 50? А меньше 50 чего?

Gerry Schmitz

Может быть, вам стоит подумать о переходе к таблицам базы данных.

1 Ответов

Рейтинг:
2

shabzo1

привет, извините, вот полный код.

<pre> private void button1_Click(object sender, EventArgs e)
        {
            int currentSheet = 1;
            Excel.Application xlApp = new Excel.Application();
            string filePath = @"C:\MyProdecData\testquote1.xltx";
            Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(filePath);
            Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(currentSheet); ;
            object misValue = System.Reflection.Missing.Value;
            
            
            string datestr = DateTime.Now.ToString("dd.MM.yyyy");
            string quote = txtName.Text.Replace(" ", " ");
            string filename = @"C:\MyProdecQuotes\";
            string myfile = filename + quote + "_" + datestr + ".xlsx";
            string salesman = txtEmail.Text.ToUpper();
            string customer = txtName.Text.ToUpper();
            string custname = txtCustName.Text.ToUpper();
            string delivery = txtDel.Text;
          
            int cell = 0;
            int rowsToDisplay = 30;
            
            int rowsToStart = 21;

            for (int row = 0; row < dataGridView1.Rows.Count - 1; row++)
            {
                int have = dataGridView1.Rows.Count;
                if (currentSheet <= xlWorkBook.Sheets.Count)
                {


                    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(currentSheet);
                }


                xlWorkSheet.get_Range("F18", "H18").Value2 = salesman;
                xlWorkSheet.get_Range("B13", "D14").Value2 = customer;
                xlWorkSheet.get_Range("B15", "D15").Value2 = custname;
                xlWorkSheet.get_Range("H13", "K15").Value2 = delivery;
                xlWorkSheet.get_Range("A13", "D14").Font.Bold = true;
                //xlWorkSheet.get_Range("C12", "E12").Font.Bold = true;
                xlWorkSheet.get_Range("I3", "J3").Value2 = DateTime.Now;
                xlWorkSheet.get_Range("I5", "K5").Value2 = quote + "_" + datestr;



                for (int column = 0; column < dataGridView1.Columns.Count; column++)
                {
                    if (column == 2 || column == 5)
                    {
                        xlWorkSheet.Cells[cell + rowsToStart, column + 1] = "'" + dataGridView1.Rows[row].Cells[column].Value.ToString().ToUpper();
                    }
                    else
                    {
                        xlWorkSheet.Cells[cell + rowsToStart, column + 1] = dataGridView1.Rows[row].Cells[column].Value.ToString().ToUpper();
                    }

                }
                int rowToDeleteFrom = rowsToStart + have;
                if ((row + 1) % rowsToDisplay == 0)
                {
                    //int rowToDeleteFrom = rowsToStart + have;//have is datagridview .rows .count
                    Excel.Range range = xlWorkSheet.get_Range("A" + rowToDeleteFrom, "A121");
                    Excel.Range entireRow = range.EntireRow;
                    entireRow.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp);


                    cell++;
                }
                else
                {
                    
                    cell++;
                }
                   
                }

            
                        
            if (System.IO.File.Exists(myfile))
            {
                System.IO.File.Delete(myfile);
            }

            //xlWorkBook.SaveAs(myfile, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.SaveAs(myfile, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, System.Reflection.Missing.Value, misValue, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlUserResolution, true, misValue, misValue, misValue);
            xlWorkBook.Saved = true;
            xlWorkBook.Close(true, misValue, misValue);
            if (xlApp != null)
            {
                xlApp.Quit();
            }

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);

            MessageBox.Show("Excel file created , CLICK on the Open quote button");
            {
                btn2.Show();

            }
        }


Richard Deeming

Если вы хотите обновить свой вопрос, Нажмите зеленую ссылку "улучшить вопрос" и отредактируйте свой вопрос.

НЕ опубликуйте свое обновление как "решение".

shabzo1

Извините.