Member 13688117 Ответов: 2

Невозможно сохранить на одном листе excel увеличивающиеся строки C#


Привет,

Я хочу создать отчет листа excel, в котором моя 1-я строка останется прежней.1-й раз, когда я создаю excel, он работает нормально.Я использовал метод save as.Он сохранен в общем формате.Данные должны добавляться каждый раз к увеличенным строкам.

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

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

Мой код:

public static int count;

private void button2_Click(object sender, EventArgs e)
{
//created Excel application workbook and sheet

if(File.Exists(@"C:\Repot.xls"))
{
 workbook = xlApp.Workbooks.Open(@"C:\Repot.xls");
count+=1;
sheet.Cells[count,"A"] = value1;
sheet.Cells[count,"B"] = value2;
sheet.Cells[count,"C"] = value3;
sheet.Cells[count,"D"] = value4;
sheet.Cells[count,"E"] = value5;
sheet.Cells[count,"F"] = value6;
.
.
.
//I have some 21 columns to fill
.
.
xlApp.DisplayAlerts = false;
workbook.SaveAs(@"C:\Repot.xls",Excel.XlFileFormat.xlWorkbookNormal,misValue,misValue,misValue,misValue,Excel.XlSaveAsAccessMode.xlShared,misValue,misValue,misValue,misValue,misValue);
}
else
{
sheet.Name = "X";
sheet.Cells[1,"A"] = "Date";
sheet.Cells[1,"B"] = "Time";
sheet.Cells[1,"C"] = "Y1";
sheet.Cells[1,"D"] = "Y2";
sheet.Cells[1,"E"] = "Y3";
sheet.Cells[1,"F"] = "Y4";
.
.
.



sheet.Cells[2,"A"] = value1;
sheet.Cells[2,"B"] = value2;
sheet.Cells[2,"C"] = value3;
sheet.Cells[2,"D"] = value4;
sheet.Cells[2,"E"] = value5;
sheet.Cells[2,"F"] = value6;
.
.
.
workbook.SaveAs(@"C:\Repot.xls",Excel.XlFileFormat.xlWorkbookNormal,misValue,misValue,misValue,misValue,Excel.XlSaveAsAccessMode.xlShared,misValue,misValue,misValue,misValue,misValue);

count=2;
}
workbook.Close(true);
xlApp.Quit();

2 Ответов

Рейтинг:
14

Patrice T

Цитата:
Я использовал статическую переменную для увеличения номера строки.Там, где файл только что создан, я устанавливаю эту переменную в 2, и в следующий раз она проверяет, существует ли файл и увеличивается ли он.Но приращения и добавления данных не происходит.Пожалуйста помочь.

Ваша логика ошибочна.
Когда вы открываете существующую книгу excel, вам нужно получить количество используемых строк на листе, а затем добавить 1.
workbook = xlApp.Workbooks.Open(@"C:\Repot.xls");
sheet= // you need to define sheet here
count=sheet.usedRange.Rows+1; // you need to get the number of rows here
sheet.Cells[count,"A"] = value1;


Member 13688117

Большое вам спасибо за логику.

Patrice T

Добро пожаловать.

Member 13688117

Это сработало отлично.

Рейтинг:
0

Maciej Los

Один count переменная сохраняет некоторое значение до тех пор, пока выполняется программа...

Итак, если вы хотите прочитать/записать его значение, вы можете использовать:
1. Диапазон в другой лист

//before you save document
workbook.Worksheets[2].Range["A1"] = count;

//after opening
count = workbook.Worksheets[2].Range["A1"];


или
2. CustomDocumentProperty Видеть: Как создать и изменить пользовательские свойства документа[^]

[РЕДАКТИРОВАТЬ]
3. Рекомендуемый метод:
Вы можете использовать Диапазон.Конец[^] или Диапазон.Метод SpecialCells (Microsoft.Офис.Взаимодействие.Превосходить)[^] для обнаружения последней строки или столбца.

Excel.Range last = sheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
Excel.Range range = sheet.get_Range("A1", last);

int lastUsedRow = last.Row;
int lastUsedColumn = last.Column;


Я бы избегал использования UsedRange. Я объяснил это в комментарии к моему ответу.


Patrice T

Я думаю, что OP нужно только получить количество используемых строк, которое известно excel как часть UsedRange.

Maciej Los

UsedRange может возвращать неправильное количество строк. Представьте себе, что вы можете иметь 2 объекта (таблицы) рядом друг с другом, где первый может иметь 10 строк, а второй-300. Вы хотите добавить данные в первый объект. Я думаю, теперь вы знаете, что такое возврат стоимости UsedRange.Rows.Count...
Овации,
Мацей

Patrice T

Я согласен с вами, но здесь это единственный стол.

Maciej Los

Даже одна таблица может вызвать несколько проблем. Поверьте, у меня большой опыт работы с VBA.