|
|
#34 |
|
Участник
|
Реализовывал сегодня в Ax2009 вызов функции TextToColumns класса Range из сборки Microsoft.Office.Interop.Excel.
Проблема возникла с тем как запрограммировать параметр Object FieldInfo. Это array форматов данных столбцов. Какой столбец должен быть текстовым, какой числовым, какой с датами и т.д. У меня несколько столбцов имеют тип "Дата" и я этот параметр обязательно должен был инициализировать и передать в функцию. Примеров в гугле даже для C# практически не смог найти. Не говоря уж про примеры из аксапты. А без примеров не совсем очевидно как сформировать этот array. В результате сегодняшних экспериментов получил следующий результат, может кому пригодится . В примере происходит открытие файла csv, в котором построчно хранятся данные, разделённые символом табуляции. После открытия происходит вызов функции TextToColumns для распределения данных по столбцам. X++: Microsoft.Office.Interop.Excel._Application excel;
Microsoft.Office.Interop.Excel.Workbooks workbooks;
Microsoft.Office.Interop.Excel._Workbook workbook;
Microsoft.Office.Interop.Excel._Worksheet ws;
Microsoft.Office.Interop.Excel.Range range;
System.Type type;
System.Reflection.FieldInfo fieldInfo;
System.Object missing;
Microsoft.Office.Interop.Excel.XlColumnDataType columnDataType;
System.Array formatArray;
System.Array array;
int i;
System.String decimalSeparator;
System.Object textToColumnsDestination;
;
type = System.Type::GetType('System.Reflection.Missing');
fieldInfo = type.GetField('Value');
missing = fieldInfo.GetValue(null);
fileFormat = Microsoft.Office.Interop.Excel.XlFileFormat::xlWorkbookDefault;
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.set_Visible(true);
workbooks = excel.get_Workbooks();
workbook = workbooks._Open( fileName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
ws = workbook.get_ActiveSheet();
range = ws.get_Range( "A:A", missing);
range.Select();
formatArray = System.Array::CreateInstance( System.Type::GetType("System.Object"), 27);
for (i=0; i<27; i++)
{
array = System.Array::CreateInstance( System.Type::GetType("System.Int32"), 2);
array.SetValue( i+1, 0);
switch (i+1)
{
case 12,13,14,15:
columnDataType = Microsoft.Office.Interop.Excel.XlColumnDataType::xlDMYFormat;
break;
case 17,18,19:
columnDataType = Microsoft.Office.Interop.Excel.XlColumnDataType::xlTextFormat;
break;
default:
columnDataType = Microsoft.Office.Interop.Excel.XlColumnDataType::xlGeneralFormat;
break;
}
array.SetValue( columnDataType, 1);
formatArray.SetValue(array,i);
}
textToColumnsDestination = ws.get_Range("A1",missing);
decimalSeparator = ",";
range.TextToColumns( textToColumnsDestination
, Microsoft.Office.Interop.Excel.XlTextParsingType::xlDelimited
, Microsoft.Office.Interop.Excel.XlTextQualifier::xlTextQualifierDoubleQuote
, false
, true
, false
, false
, false
, false
, missing
, formatArray
, decimalSeparator
, missing
, true
);
__________________
Дмитрий |
|
|
|
| За это сообщение автора поблагодарили: dech (3), Logger (5). | |
| Теги |
| .net, ax2009, excel, законченный пример, полезное |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|