Как сохранить из C # в Excel? - PullRequest
2 голосов
/ 18 мая 2009
BOWorkerDetail oBOWorkerDetail = new BOWorkerDetail();
            WorkerDetails oWorkerDetails = new WorkerDetails();
            oWorkerDetails = oBOWorkerDetail.Gets();

oWorkerdetails - это собрание всех работников. Мне нужно сохранить это значение в Excel. как сделать ? Может ли кто-нибудь помочь? Я работаю на платформе окна C # vs05.

Ответы [ 5 ]

2 голосов
/ 18 мая 2009

вы должны посмотреть на это http://www.connectionstrings.com/excel,, там вы можете найти несколько строк подключения, которые работают с механизмом ODBC. Пример:

OdbcConnection connection = new OdbcConnection(@"Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=" + xlsFilePath + "; ReadOnly=False; DefaultDir=" + xlsDir + ";");

(на рабочей станции должен быть установлен Microsoft Excel)

тогда вы можете создать IDbCommand следующим образом: IDbCommand command = connection.CreateCommand ();

вы можете использовать эту команду как любую команду sql: "CREATE TABLE", "INSET INTO" для каждого из DataRow в вашей DataTable.

Надеюсь, это поможет ...

1 голос
/ 18 мая 2009

Вот пример использования инструментов Visual Studio для Office 2008 и Office Excel Interop для записи списка> в новый файл Excel:

using System;
using System.Collections.Generic;
using System.Reflection;

using Microsoft.Office.Interop.Excel;

namespace Project1
{
  public class ExportExcel
  {
    public void Export(string fileName, List<List<string>> data)
    {
      _Application excel = null;
      _Workbook wb = null;
      try
      {
        excel = new ApplicationClass { Visible = false }; // new excel application (not visible)
        wb = excel.Workbooks.Add(Missing.Value); // new excel file

        var sh = ((_Worksheet)wb.ActiveSheet); // current sheet
        for (var i = 0; i < data.Count; i++)
        {
          var listMaster = data[i];
          for (var j = 0; j < listMaster.Count; j++)
          {
            sh.get_Range(sh.Cells[j + 1, i + 1], sh.Cells[j + 1, i + 1]).Value2 = listMaster[j];
            // get_Range(start, end) where start, end is in R1C1 notation
          }
        }
      }
      finally
      {
        if (wb != null)
        {
          wb.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
        }
        if (excel != null)
        {
          excel.Quit();
        }
        GC.Collect();
      }
    }
  }
}

VSTO требует, чтобы Excel был установлен на клиентском компьютере

1 голос
/ 18 мая 2009

Если на компьютере, на котором выполняется код, не установлен Excel, вы можете экспортировать его в файл XML или CSV (значения, разделенные запятыми), а затем импортировать его в Excel.

Если вы используете XML, вы также можете экспортировать схему.

Как отмечает BarneyHDog в комментариях, Excel может делать неприятные вещи с данными, основываясь на том, что он считает типом данных. Поэтому, если вы пойдете по этому маршруту, дважды проверьте, что ваш вывод обрабатывается правильно.

1 голос
/ 18 мая 2009

Я рекомендую использовать нативную библиотеку и избегать Interop. Взгляните на Aspose.Cells

0 голосов
/ 18 мая 2009

Очень простой способ сделать это - использовать библиотеку filehelpers

http://filehelpers.sourceforge.net/

Есть множество примеров.

Библиотека действительно надежна, я использовал ее много раз. Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...