Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Из Datatable в Excel Добавлено: 03.02.12 01:27  

Автор вопроса:  Zahar | Web-сайт: partnerka-ru.info
Имеется DataTable с именем dt и лист Excel c именем Sheet. Для того, чтобы копировать данные из dt в Sheet делаю так:

Dim arr(dt.Rows.Count - 1, dt.Columns.Count - 1) As Object
For i = 0 To dt.Rows.Count - 1
For y = 0 To dt.Columns.Count - 1
arr(i, y) = dt.Rows(i).Item(y)
Next
Next
Sheet.Range("A1").Resize(dt.Rows.Count, dt.Columns.Count).Value = arr


Но нельзя ли это сделать, минуя стадию пошагового заполнения массива?

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 SHDZ



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #1 Добавлено: 13.02.12 15:00
попробуй просто грид копировать в буфер
на контролах "ComponentOne VSFlexGrid 8.0" проходит 100%

Ответить

Номер ответа: 2
Автор ответа:
 Zahar



Вопросов: 91
Ответов: 67
 Web-сайт: partnerka-ru.info
 Профиль | | #2
Добавлено: 13.02.12 23:42
Проблема в том, что VSFlexGrid VB.NET поддерживается с ограничениями.

Ответить

Номер ответа: 3
Автор ответа:
 SHDZ



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #3 Добавлено: 14.02.12 11:43
Еще пример:
  1.  
  2.  // данные будут взяты из таблицы EMPLOYEE из файла DBDEMOS.MDB
  3.       string dbFile = Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles);
  4.       dbFile += @"\Borland Shared\Data\dbdemos.mdb";
  5.       // заменим путь к файлу dbdemos
  6.       dbFile = Regex.Replace(oleDbConnection1.ConnectionString,
  7.         @"^(?<start>.*?;Data Source=)(?<db>[^;]*)(?<end>;.*)$",
  8.         "${start}" + dbFile + "${end}");
  9.       oleDbConnection1.ConnectionString = dbFile;
  10.       try
  11.       {
  12.         oleDbDataAdapter1.Fill(dataSet1, "employee");
  13.         oleDbConnection1.Close(); // закроем соединение
  14.         //
  15.         DataTable tblEmployee = dataSet1.Tables["employee"];
  16.         dataGrid1.DataSource = tblEmployee; // dataSet1.Tables["employee"];
  17.         // создадим двумерный массив для экспорта
  18.         object[,] arrEmployee = (object[,]) Array.CreateInstance(typeof(object),
  19.           new int[2] {tblEmployee.Rows.Count + 1, tblEmployee.Columns.Count}, // длины массива
  20.           new int[2] {0, 1}); // начальные индексы строк и столбцов
  21.         // заголовки
  22.         for (int i = 0; i < tblEmployee.Columns.Count; i++)
  23.           arrEmployee[0, i + 1] = tblEmployee.Columns.Caption;
  24.         // данные
  25.         for (int R = 0; R < tblEmployee.Rows.Count; R++)
  26.           for (int C = 0; C < tblEmployee.Columns.Count; C++) {
  27.             arrEmployee[R + 1, C + 1] = tblEmployee.Rows[R][C];
  28.             Application.DoEvents();
  29.           }
  30.         Excel.Worksheet oSheet = null;
  31.         Excel.Range oRng = null;
  32.         Excel.Application XL = new Excel.Application();
  33.         try
  34.         {
  35.           XL.Visible = true;
  36.           XL.Interactive = false;
  37.           XL.Workbooks.Add(Type.Missing);
  38.           oSheet = (Excel.Worksheet) XL.ActiveSheet;
  39.           oRng = oSheet.get_Range(oSheet.Cells[1, 1],
  40.             oSheet.Cells[tblEmployee.Rows.Count + 1, tblEmployee.Columns.Count]);
  41.           oRng.Formula = arrEmployee; // запись данных
  42.           oRng.EntireColumn.AutoFit();
  43.           oRng.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
  44.           oRng.Borders.Weight = Excel.XlBorderWeight.xlHairline;
  45.           // шапка
  46.           oRng = oSheet.get_Range(oSheet.Cells[1, 1],
  47.             oSheet.Cells[1, tblEmployee.Columns.Count]);
  48.           oRng.Interior.ColorIndex = 15; // 25% серого
  49.           oRng.Interior.Pattern = Excel.XlPattern.xlPatternSolid;
  50.           XL.ActiveWindow.SplitRow = 1;
  51.           XL.ActiveWindow.FreezePanes = true;
  52.           XL.ActiveWindow.DisplayGridlines = false;
  53.           XL.ActiveWorkbook.Saved = true;
  54.           this.Activate();
  55.         }
  56.         finally
  57.         {
  58.           oSheet = null;
  59.           XL.Interactive = true;
  60.           XL.UserControl = true;
  61.           XL = null;
  62.         }
  63.         dataSet1.Tables.Remove(tblEmployee);
  64.       }
  65.       catch (Exception ex)
  66.       {
  67.         if (oleDbConnection1.State == ConnectionState.Open) oleDbConnection1.Close();
  68.         MessageBox.Show(ex.Message);
  69.       }

Ответить

Номер ответа: 4
Автор ответа:
 SHDZ



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #4 Добавлено: 14.02.12 11:55
Мгновенная вставка с грида:
  1.  
  2. Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
  3.  
  4.             Microsoft.Office.Interop.Excel.Workbook wb = excel.Workbooks.Add(Type.Missing);
  5.             Microsoft.Office.Interop.Excel.Worksheet ws = new Microsoft.Office.Interop.Excel.WorksheetClass();
  6.             ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet;
  7.             Microsoft.Office.Interop.Excel.Range rng = excel.get_Range(ws.Cells[1, 2], ws.Cells[1, 2]);
  8.  
  9.             dg.SelectAll();
  10.             dg.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithAutoHeaderText;
  11.  
  12.  
  13.             try
  14.             {
  15.                 // Add the selection to the clipboard.
  16.                 Clipboard.SetDataObject(
  17.                     this.dg.GetClipboardContent());
  18.  
  19.                 // Replace the text box contents with the clipboard text.
  20.                 rng._PasteSpecial(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteAll, Microsoft.Office.Interop.Excel.XlPasteSpecialOperation.xlPasteSpecialOperationMultiply, Type.Missing, Type.Missing);
  21.             }
  22.             catch (System.Runtime.InteropServices.ExternalException)
  23.             {
  24.                 this.Text =  "The Clipboard could not be accessed. Please try again.";
  25.             }
  26.             excel.ScreenUpdating = true;
  27.             excel.DisplayAlerts = true;
  28.             excel.Visible = true;

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам