У меня есть данные, прибывающие из таблицы Модели данных Объекта на моей странице ASP.NET. Теперь я должен экспортировать эти данные в Excel на нажатии кнопки.
Если это использует OLEDB, это является прямым, как это здесь: http://csharp.net-informations.com/excel/csharp-excel-oledb-insert.htm
Вот моя функция для чтения данных с таблицы запросов:
var model = from i in myEntity.Inquiries
where i.User_Id == 5
orderby i.TX_Id descending
select new {
RequestID = i.TX_Id,
CustomerName = i.CustomerMaster.FirstName,
RequestDate = i.RequestDate,
Email = i.CustomerMaster.MS_Id,
DocDescription = i.Document.Description,
ProductName = i.Product.Name
Простой способ - привязать вид сетки и экспортировать его, см. http://aspalliance.com/771 (первый пример поиска с помощью Google)
Вы можете просто написать строковое представление ваших данных - табуляция для каждого поля и \ r \ n для каждой строки. Затем выполните потоковую передачу из браузера в виде файла .csv, который автоматически откроется в Excel.
Вы можете рассмотреть возможность использования SpreadSheetML, который в основном представляет собой файл XML с процессом Cocoon, упомянутым поверх файла xml, для запуска приложения Excel при двойном щелчке по файлу xml. Пример для SpreadSheetML представлен ниже.
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:ms="urn:schemas-microsoft-com:xslt">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author xmlns="urn:schemas-microsoft-com:office:spreadsheet">Author<"/Author>
<LastAuthor xmlns="urn:schemas-microsoft-com:office:spreadsheet">Author<"/LastAuthor>
<Created xmlns="urn:schemas-microsoft-com:office:spreadsheet"/>
<LastSaved xmlns="urn:schemas-microsoft-com:office:spreadsheet"/>
<Company xmlns="urn:schemas-microsoft-com:office:spreadsheet">Author<"/Company>
<Version xmlns="urn:schemas-microsoft-com:office:spreadsheet">11.8132<"/Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight xmlns="urn:schemas-microsoft-com:office:spreadsheet">12660<"/WindowHeight>
<WindowWidth xmlns="urn:schemas-microsoft-com:office:spreadsheet">19020<"/WindowWidth>
<WindowTopX xmlns="urn:schemas-microsoft-com:office:spreadsheet">120<"/WindowTopX>
<WindowTopY xmlns="urn:schemas-microsoft-com:office:spreadsheet">105<"/WindowTopY>
<ProtectStructure xmlns="urn:schemas-microsoft-com:office:spreadsheet">False<"/ProtectStructure>
<ProtectWindows xmlns="urn:schemas-microsoft-com:office:spreadsheet">False<"/ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="s21">
<NumberFormat ss:Format="Percent"/>
</Style>
<Style ss:ID="s22">
<NumberFormat ss:Format="[ENG][$-409]d\-mmm\-yyyy;@"/>
</Style>
<Style ss:ID="s23">
<NumberFormat ss:Format="mm/dd/yyyy;@"/>
</Style>
<Style ss:ID="s24">
<Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
<Font x:Family="Swiss" ss:Bold="1"/>
</Style>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
</Styles>
<Worksheet ss:Name="SomeSheetName">
<Table ss:ExpandedColumnCount="33" ss:ExpandedRowCount="5768" x:FullColumns="1" x:FullRows="1">
<Column ss:Width="111"/>
<Row>
<Cell ss:StyleID="s24">
<Data ss:Type="String">ABCD<"/Data>
</Cell>
<Cell ss:StyleID="s24">
<Data ss:Type="String">ABCD<"/Data>
</Cell>
<Cell ss:StyleID="s24">
<Data ss:Type="String">ABCD<"/Data>
</Cell>
<Cell ss:StyleID="s24">
<Data ss:Type="String">ABCD<"/Data>
</Cell>
<Cell ss:StyleID="s24">
<Data ss:Type="String">ABCD<"/Data>
</Cell>
</Row>
</Column>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<Selected/>
<ProtectObjects>False<"/ProtectObjects>
<ProtectScenarios>False<"/ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
Надеюсь, это поможет.
Как упоминалось ранее, самый простой способ экспортировать данные в Excel - это создать текст или XML-представление. Что касается меня, я предпочитаю использовать движок шаблонов текста SpreadSheetML и T4 для создания файлов. Вы можете взглянуть на образец файла T4 здесь: http://lilium.codeplex.com/SourceControl/changeset/view/40985#803959 .
Если вы решите использовать T4, имейте в виду, что T4 является частью MS Visual Studio, и вы НЕ МОЖЕТЕ распространять его отдельно. Проблему можно решить, установив Visual Studio Express Edition на целевой компьютер.
В качестве альтернативы вы можете использовать встроенный механизм шаблонов aspx, используемый для генерации классов представлений aspx. Посмотрите, как это делается здесь [ой, это не позволяет мне публиковать больше гиперссылок, если вам все еще интересно, дайте мне знать] (обратите внимание, что это реальное приложение, поэтому код довольно большой и грязный). Движок Aspx обрабатывает тег Style по-своему, поэтому вам придется использовать полное имя, чтобы он работал, автоматическое форматирование в Visual Studio также не будет работать правильно.
Вы все еще можете вставить в электронную таблицу Excel, используя тот же метод, который описан в связанной статье.
Просто используйте следующий псевдокод
try
{
System.Data.OleDb.OleDbConnection MyConnection ;
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
string sql = null;
MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\csharp.net-informations.xls';Extended Properties=Excel 8.0;");
MyConnection.Open();
myCommand.Connection = MyConnection;
myCommand.CommandText = "Insert into [Sheet1$] (id,name) values('@p1', '@p2')";
myCommand.Parameters.Add("@p1", OleDbType.VarChar, 100);
myCommand.Parameters.Add("@p2", OleDbType.VarChar, 100);
// define query to entity data model
var model = from i in myEntity.Inquiries select i;
foreach(var m in model)
{
cmd.Parameters["@p1"].Value = m.RequestID;
cmd.Parameters["@p2"].Value = m.CustomerName;
// .. Add other parameters here
cmd.ExecuteNonQuery();
}
}
Вы можете использовать библиотеку NPOI с открытым исходным кодом для записи excel, doc, powerpoint и т. д.