Как добавить к существующему файлу Excel, не перезаписывая его с помощью C #? [Дубликат]

Я нашел следующие методы полезными:

  1. Убедитесь, что ваш механизм базы данных настроен на прием удаленных подключений: Пуск> Все программы> SQL Server 2005> Средства настройки> Конфигурация зоны SQL Server Нажмите в разделе Конфигурация поверхности для служб и подключений Выберите экземпляр, имеющий проблемы> Механизм базы данных> Удаленные подключения Включение локальных и удаленных подключений Перезапуск экземпляра
  2. Возможно, вам нужно создать исключение на брандмауэре для SQL Server экземпляр и порт, которые вы используете: Пуск> Выполнить> Брандмауэр.cpl Перейдите на вкладку исключений Добавить sqlservr.exe (обычно находится в C:\Program Files (x86)\Microsoft SQL Server\MSSQL.x\MSSQL\Bin, проверьте установки для фактического пути к папке) и порт (по умолчанию 1433). Проверьте Строка соединения также из FIX: ОШИБКА: Не удалось открыть соединение с SQL Server :
  3. Проверьте, правильно ли работают службы SQL Server: Перейти к Все программы> Microsoft SQL Server 2008> Инструменты настройки> Конфигурация SQL Server ation Manager> Службы SQL Server Проверьте, работает ли статус службы SQL Server. Кроме того, убедитесь, что ваш удаленный сервер находится в одной сети. Запустите sqlcmd -L, чтобы узнать, включен ли ваш сервер в список вашей сети.
  4. Включить TCP / IP в конфигурации SQL Server Когда два или более SQL-сервера подключены по сети, они выполняют все коммуникации с использованием TCP / IP. Стандартный порт установки SQL Server - 1433. Этот порт можно изменить с помощью диспетчера конфигурации SQL Server. Для подключения SQL Server необходимо включить TCP / IP. Перейти к Все программы >> Microsoft SQL Server 2008 >> Инструменты настройки >> Диспетчер конфигурации SQL Server >> Выберите TCP / IP Щелкните правой кнопкой мыши по TCP / IP >> Нажмите «Включить». Необходимо перезапустить службы SQL Server, чтобы все изменения вступили в силу , Щелкните правой кнопкой мыши и перейдите к свойствам меню, чтобы выбрать местоположение, где порт по умолчанию для SQL Server можно изменить.

0
задан DisplayName 25 January 2017 в 21:48
поделиться

1 ответ

Когда вам нужно добавить данные к существующему листу, вам нужно выяснить, где была последняя используемая строка, и начать добавлять данные после этой строки. Ваш текущий код для этой «последней» строки неудобен, как только вы начинаете добавлять строки, которые вы продолжаете проверять на эту «последнюю» строку, которая не нужна. Метод 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);
 .
 .
 .

Надеюсь, это имеет смысл.

2
ответ дан JohnG 18 August 2018 в 07:23
поделиться
  • 1
    О, МОЙ БОГ. Большое вам спасибо, это работает. спасибо за то, что я тоже с ним поделал :) последний вопрос извините .. знаете ли вы, как сделать «Зарегистрированное имя ...» уже существует в этом месте. Вы хотите его заменить? & Quot; из Excel не отображается? благодаря – DisplayName 25 January 2017 в 22:21
  • 2
    Если вы не хотите видеть диалог перезаписи, вы можете отключить DisplayAlerts в excel, например: xlApp.DisplayAlerts = false; – JohnG 25 January 2017 в 22:34
  • 3
    Большое спасибо – DisplayName 25 January 2017 в 23:24