Я нашел следующие методы полезными:
C:\Program Files (x86)\Microsoft SQL Server\MSSQL.x\MSSQL\Bin
, проверьте установки для фактического пути к папке) и порт (по умолчанию 1433
). Проверьте Строка соединения также из FIX: ОШИБКА: Не удалось открыть соединение с SQL Server : sqlcmd -L
, чтобы узнать, включен ли ваш сервер в список вашей сети. Когда вам нужно добавить данные к существующему листу, вам нужно выяснить, где была последняя используемая строка, и начать добавлять данные после этой строки. Ваш текущий код для этой «последней» строки неудобен, как только вы начинаете добавлять строки, которые вы продолжаете проверять на эту «последнюю» строку, которая не нужна. Метод getData()
просто добавляет данные в новый файл excel, где последняя строка не имеет значения. Если файл существует, вам просто нужно получить последнюю использованную строку и начать импортировать данные в следующую строку. Я предполагаю, что может быть лучше, чем ваш код, отправить индекс начальной строки для метода GetData(RowToStart)
и просто увеличить значение переменной lastRow_
, как показано ниже: Нет необходимости продолжать проверять эту последнюю строку.
private void getData(int lastRow_) {
double a, b, c, d, total = 0;
//int lastRow_ = 4;
foreach (DataGridViewRow r in dataGridView1.Rows) {
//if (!row.IsNewRow) {
if (!r.IsNewRow) {
a = Convert.ToDouble(r.Cells[2].Value);
b = Convert.ToDouble(r.Cells[3].Value);
c = Convert.ToDouble(r.Cells[4].Value);
d = Convert.ToDouble(r.Cells[5].Value);
total = a + b + c + d;
xlWorkSheet.Cells[lastRow_, 1] = "Hi";
xlWorkSheet.Cells[lastRow_, 2] = "Hello";
xlWorkSheet.Cells[lastRow_, 3] = Convert.ToString(total);
lastRow_++;
//lastRow_ = xlWorkSheet.Cells.Find(
// "*",
// xlWorkSheet.Cells[1, 1],
// misValue,
// Microsoft.Office.Interop.Excel.XlLookAt.xlPart,
// Microsoft.Office.Interop.Excel.XlSearchOrder.xlByRows,
// Microsoft.Office.Interop.Excel.XlSearchDirection.xlPrevious,
// misValue,
// misValue,
// misValue).Row + 1;
}
}
total = 0;
}
Если файл является новым, вы вызываете этот метод, как показано ниже.
.
.
.
xlWorkSheet.Cells[3, 1] = "Header1";
xlWorkSheet.Cells[3, 2] = "Header2";
xlWorkSheet.Cells[3, 3] = "Total";
getData(4);
.
.
.
Если файл уже существует, и вам необходимо добавить данные на существующий рабочий лист чтобы получить последнюю использованную строку, затем запустите следующую строку. Вы можете вызвать getData(RowToStart)
, как показано ниже.
.
.
.
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBigSheet.get_Item("Sheet1");
Microsoft.Office.Interop.Excel.Range last = xlWorkSheet.Cells.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
int lastUsedRow = last.Row;
getData(lastUsedRow + 1);
.
.
.
Надеюсь, это имеет смысл.
DisplayAlerts
в excel, например:xlApp.DisplayAlerts = false;
– JohnG 25 January 2017 в 22:34