Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Excel - быстрый импорт


Автор: xsb3 14.11.2009, 12:00
Да хорошие темы в форуме затронуты по экселю, нашел даже полезные но вот проблемка у меня такая:
у меня есть 2 варианта выгрузки

Код

// create the DataGrid and perform the databinding
System.Web.UI.WebControls.DataGrid grid = new System.Web.UI.WebControls.DataGrid();
grid.HeaderStyle.Font.Bold = true;
grid.DataSource = dataSet11;
grid.DataMember = dataSet11.ZAKAZ4IKI.TableName;
grid.DataBind();
using (StreamWriter sw = new StreamWriter(textBox3.Text))
{
using (HtmlTextWriter hw = new HtmlTextWriter(sw))
{
grid.RenderControl(hw);
}
}


Все в нем классно набор из 10000 записей делает влет НО вставляет данные только в 1 лист и с 1 ячейки
второй код
Код

Microsoft.Office.Interop.Excel.ApplicationClass zExcel = new ApplicationClass();
zExcel.IgnoreRemoteRequests = true;
Workbook zBook = zExcel.Workbooks.Add(@"D:\data.xls");
Worksheet zSheet = (Worksheet)zBook.ActiveSheet;
zExcel.Visible = true;
for (int i = 0; i < dataSet51.ZAKAZ4IKI.Columns.Count; i++)
{
for (int j = 0; j < dataSet51.ZAKAZ4IKI.Rows.Count; j++)
{
((Range)zSheet.Cells[j + 6, i + 6]).Value2 = dataGrid5[j, i].ToString();
}
}
zExcel.IgnoreRemoteRequests = false;

тоже все классно вставляет в какую книгу мне нада НО такой медленный способ если нужно вставить около 1000 хотябы ячеек может кто подскажет как 1 заставить в нужный лист в нужные ячейки кидать данные или как ускорить второй вариант ато по 7 минут 10000 ячеек выгрузки ждать ужас 
Ктото предлагал выгрузку массивами из датасета в эксель но чтото я не вьехал как 
(XML выгрузку и прочее пожалуйста не предлагать) желательно пример кода smile

Автор: xsb3 14.11.2009, 20:50
Код

 Microsoft.Office.Interop.Excel.ApplicationClass zExcel = new ApplicationClass();
            zExcel.IgnoreRemoteRequests = true;
            Workbook zBook = zExcel.Workbooks.Add(@"D:\data.xls");
            Worksheet zSheet = (Worksheet)zBook.ActiveSheet;
            zExcel.Visible = true;
            object[,] values = new object[dataSet11.ZAKAZ4IKI.Rows.Count, dataSet11.ZAKAZ4IKI.Columns.Count];
            for (int i = 0; i < dataSet11.ZAKAZ4IKI.Columns.Count; i++)
            {
                for (int j = 0; j < dataSet11.ZAKAZ4IKI.Rows.Count; j++)
                {
                    values[j, i] = dataGrid1[j, i].ToString();
                }
            }
            zSheet.get_Range(zSheet.Cells[6, 6], zSheet.Cells[6 + dataSet11.ZAKAZ4IKI.Rows.Count - 1, 6 + dataSet11.ZAKAZ4IKI.Columns.Count - 1]).Value2 = values;
            zExcel.IgnoreRemoteRequests = false;       

Для остальных кто сталкнется модефицирование кода в первом посте. Работает крайне быстро.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)