Страница: 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
Но нельзя ли это сделать, минуя стадию пошагового заполнения массива?
Ответить
Номер ответа: 3Автор ответа: SHDZ
ICQ: 209382104 Вопросов: 39Ответов: 244
Профиль | | #3
Добавлено: 14.02.12 11:43
Еще пример:
// данные будут взяты из таблицы EMPLOYEE из файла DBDEMOS.MDB
string dbFile = Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles);
dbFile += @"\Borland Shared\Data\dbdemos.mdb" ;
// заменим путь к файлу dbdemos
dbFile = Regex.Replace(oleDbConnection1.ConnectionString,
@"^(?<start>.*?;Data Source=)(?<db>[^;]*)(?<end>;.*)$" ,
"${start}" + dbFile + "${end}" );
oleDbConnection1.ConnectionString = dbFile;
try
{
oleDbDataAdapter1.Fill(dataSet1, "employee" );
oleDbConnection1.Close(); // закроем соединение
//
DataTable tblEmployee = dataSet1.Tables["employee" ];
dataGrid1.DataSource = tblEmployee; // dataSet1.Tables["employee" ];
// создадим двумерный массив для экспорта
object [,] arrEmployee = (object [,]) Array.CreateInstance(typeof (object ),
new int [2] {tblEmployee.Rows.Count + 1, tblEmployee.Columns.Count}, // длины массива
new int [2] {0, 1}); // начальные индексы строк и столбцов
// заголовки
for (int i = 0; i < tblEmployee.Columns.Count; i++)
arrEmployee[0, i + 1] = tblEmployee.Columns.Caption;
// данные
for (int R = 0; R < tblEmployee.Rows.Count; R++)
for (int C = 0; C < tblEmployee.Columns.Count; C++) {
arrEmployee[R + 1, C + 1] = tblEmployee.Rows[R][C];
Application.DoEvents();
}
Excel.Worksheet oSheet = null ;
Excel.Range oRng = null ;
Excel.Application XL = new Excel.Application();
try
{
XL.Visible = true ;
XL.Interactive = false ;
XL.Workbooks.Add(Type.Missing);
oSheet = (Excel.Worksheet) XL.ActiveSheet;
oRng = oSheet.get_Range(oSheet.Cells[1, 1],
oSheet.Cells[tblEmployee.Rows.Count + 1, tblEmployee.Columns.Count]);
oRng.Formula = arrEmployee; // запись данных
oRng.EntireColumn.AutoFit();
oRng.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
oRng.Borders.Weight = Excel.XlBorderWeight.xlHairline;
// шапка
oRng = oSheet.get_Range(oSheet.Cells[1, 1],
oSheet.Cells[1, tblEmployee.Columns.Count]);
oRng.Interior.ColorIndex = 15; // 25% серого
oRng.Interior.Pattern = Excel.XlPattern.xlPatternSolid;
XL.ActiveWindow.SplitRow = 1;
XL.ActiveWindow.FreezePanes = true ;
XL.ActiveWindow.DisplayGridlines = false ;
XL.ActiveWorkbook.Saved = true ;
this .Activate();
}
finally
{
oSheet = null ;
XL.Interactive = true ;
XL.UserControl = true ;
XL = null ;
}
dataSet1.Tables.Remove(tblEmployee);
}
catch (Exception ex)
{
if (oleDbConnection1.State == ConnectionState.Open) oleDbConnection1.Close();
MessageBox.Show(ex.Message);
}
Ответить
Страница: 1 |
Поиск по форуму