Преобразуйте таблицу данных в Excel 2007 (.xlsx)

Я имею DataTable Я должен поместить в формат Excel 2007 и сохранить его как файл Excel (.xlsx) 2007.

Кто-либо может помочь мне достигнуть этого?

10
задан Kelsey 19 July 2010 в 17:12
поделиться

4 ответа

Вы можете использовать провайдер данных OLEDB и просто рассматривать Excel как другой источник данных ADO.NET, чтобы в цикле просматривать строки DataTable и вставлять их в таблицу Excel. Вот статья в Microsoft KB, в которой рассказывается много подробностей.

http://support.microsoft.com/kb/316934/en-us

Главное, о чем следует помнить, это то, что вы можете создавать рабочие книги и листы внутри рабочей книги, и вы можете ссылаться на существующие листы, добавляя '$' в конце имени. Если вы опустите '$' в конце имени листа, провайдер OLEDB будет считать, что это новый лист, и попытается его создать.

Знак доллара, следующий за за именем рабочего листа, является признаком того, что что таблица существует. Если вы создаете новую таблицу, как обсуждалось в разделе Создание новых рабочих книг и таблиц разделе этой статьи, не используйте знак доллара.

Вы можете создать электронную таблицу в формате 2003 (.xls) или 2007 (xlsx), и это определяется в вашей строке подключения - вы указываете файл, в который собираетесь писать, и просто указываете расширение. Убедитесь, что вы используете правильную версию провайдера OLEDB.

Если вы хотите создать версию 2003 (.xls), используйте эту строку подключения:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties="Excel 8.0;HDR=YES

Если вы хотите создать версию 2007 (.xlsx), используйте эту строку подключения:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Book1.xlsx;Extended Properties="Excel 12.0;HDR=YES

Возможно, вам придется загрузить провайдер ACE от Microsoft для создания файлов XLSX. Вы можете найти его здесь.

Я обычно использую провайдер XLS, поэтому я не так часто работал с провайдером XLSX.

Надеюсь, это поможет. Дайте мне знать, если у вас есть другие вопросы.

8
ответ дан 3 December 2019 в 23:11
поделиться

вам придется делать много interop, вот учебник, надеюсь, он поможет. link text

0
ответ дан 3 December 2019 в 23:11
поделиться

Нашел это в старом коде, который я делал лет 5 назад и который должен работать...

public static void DataTableToExcel(DataTable tbl)
{
    HttpContext context = HttpContext.Current;
    context.Response.Clear();
    foreach (DataColumn c in tbl.Columns)
    {
        context.Response.Write(c.ColumnName + ";");
    }
    context.Response.Write(Environment.NewLine);
    foreach (DataRow r in tbl.Rows)
    {
        for (int i = 0; i < tbl.Columns.Count; i++)
        {
            context.Response.Write(r[i].ToString().Replace(";", string.Empty) + ";");
        }
        context.Response.Write(Environment.NewLine);
    }
    context.Response.ContentType = "text/csv";
    context.Response.AppendHeader("Content-Disposition",
        "attachment; filename=export.csv");
    context.Response.End();
}

Это выведет из ASP.NET ответ с CSV файлом, который Excel 2007 может открыть. Если вы хотите, вы можете изменить расширение для имитации excel, и это должно работать, просто заменив следующие строки:

    context.Response.ContentType = "application/vnd.ms-excel";
    context.Response.AppendHeader("Content-Disposition",
        "attachment; filename=export.xlsx");

CSV - это самый простой способ, если вам не нужно делать ничего сложного. Если вам нужно, чтобы это действительно был файл Excel 2007 в родном формате, вам нужно будет использовать библиотеку Office для его создания или преобразовать его из CSV, а затем подать/сохранить его.

Эта ссылка также может быть полезна:

Как избежать окна подсказки Excel при экспорте данных в Excel 2007

1
ответ дан 3 December 2019 в 23:11
поделиться

Некоторое время назад я написал следующий код для компании. Он принимает Enumerable любого типа и экспортирует все его (get) свойства в Excel, а также открывает Excel. Вы должны иметь возможность сделать что-то подобное для DataTable. Помните, что вам нужно добавить ссылку на Microsoft.Office.Interop.Excel

    public static void ExportToExcel<T>(IEnumerable<T> exportData)
    {
        Excel.ApplicationClass excel = new Excel.ApplicationClass();
        Excel.Workbook workbook = excel.Application.Workbooks.Add(true);
        PropertyInfo[] pInfos = typeof(T).GetProperties();
        if (pInfos != null && pInfos.Count() > 0)
        {
            int iCol = 0;
            int iRow = 0;
            foreach (PropertyInfo eachPInfo in pInfos.Where(W => W.CanRead == true))
            {
                // Add column headings...
                iCol++;
                excel.Cells[1, iCol] = eachPInfo.Name;
            }
            foreach (T item in exportData)
            {
                iRow++;
                // add each row's cell data...
                iCol = 0;
                foreach (PropertyInfo eachPInfo in pInfos.Where(W => W.CanRead == true))
                {
                    iCol++;
                    excel.Cells[iRow + 1, iCol] = eachPInfo.GetValue(item, null);
                }

            }
            // Global missing reference for objects we are not defining...
            object missing = System.Reflection.Missing.Value;
            // If wanting to Save the workbook...   
            string filePath = System.IO.Path.GetTempPath() + DateTime.Now.Ticks.ToString() + ".xlsm";
            workbook.SaveAs(filePath, Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled, missing, missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
            // If wanting to make Excel visible and activate the worksheet...
            excel.Visible = true;
            Excel.Worksheet worksheet = (Excel.Worksheet)excel.ActiveSheet;
            excel.Rows.EntireRow.AutoFit();
            excel.Columns.EntireColumn.AutoFit();
            ((Excel._Worksheet)worksheet).Activate();
        }
    }
3
ответ дан 3 December 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: