helpf.pro
Регистрация
 +6 
Распечатать

Преобразование XLS в MXL

Конвертация таблиц из Excel в MXL - скачать Converter Excel v MXL:
Для 8.х - Скачивать файлы может только зарегистрированный пользователь!
Для 7.7 - Скачивать файлы может только зарегистрированный пользователь!

Код 1C v 8.х
 // Выбор файла Microsoft Excel
Procedure FileNameStartChoice(Element, StdProcessing)

StdProcessing = False;
DialogFile = New FileDialog(FileDialogMode.Open);
DialogFile.Filter = "Файлы Microsoft Excel (*.xls)|*.xls";
DialogFile.DefaultExt = "xls";
If DialogFile.Choose() Then
FileName = DialogFile.FullFileName;
EndIf;

EndProcedure // FileNameStartChoice()
// Получить список листов текущей книги
Function GetSheets(ExcelApplication)

ListS_electSheet = New ValueList;

ListS_electSheet.Add(0, "Все листы");

NumberSheet = 0;
For FirstSheet = 1 To ExcelApplication.Worksheets.Count Do

NumberSheet = NumberSheet + 1;
ListS_electSheet.Add(
NumberSheet, ExcelApplication.WorkSheets(NumberSheet).Name
);

EndDo;

Return ListS_electSheet;

EndFunction // GetSheets()

// Преобразование XLS в MXL
Procedure ButtonExecuteClick()

If IsBlankString(FileName) Then
DoMessageBox("Не указано имя файла");
Return;
EndIf;

Try
ExcelApplication = GetCOMObject(FileName); // Excel.Application
Except
DoMessageBox("Ошибка чтения файла: " + FileName + " возможно защищен паролем.");
Return;
EndTry;

S_electSheet = 0;
S_electSheet = GetSheets(ExcelApplication).ChooseItem("Выберите лист", S_electSheet);

If S_electSheet = Undefined Then
Return;
EndIf;

S_electNumberSheet1 = S_electSheet.Value;
S_electNumberSheet2 = S_electNumberSheet1;
If S_electNumberSheet1 = 0 Then
S_electNumberSheet1 = 1;
S_electNumberSheet2 = ExcelApplication.Worksheets.Count
EndIf;

frmProgressBar = GetForm("FormProgressBar");
frmProgressBar.Caption = "Обрабатывается файл: " + FileName;
frmProgressBar.Controls.ProgressBarAll.MaxValue = S_electNumberSheet2;
frmProgressBar.Controls.ProgressBarAll.Value = 0;

For NumberSheet = S_electNumberSheet1 To S_electNumberSheet2 Do

frmProgressBar.Open();

SprDoc = New SpreadsheetDocument;

Try
WorkSheet = ExcelApplication.Sheets(NumberSheet).UsedRange;
Except
DoMessageBox(ErrorDescription());
Return;
EndTry;

AllStrings = WorkSheet.Rows.Count; // Всего строк
AllColumns = WorkSheet.Columns.Count; // Всего колонок
AllCells = AllStrings * AllColumns; // Все ячейки

frmProgressBar.Controls.InfoProgressBarAll.Value = "Обрабатывается лист № " +
NumberSheet + " из " +
S_electNumberSheet2;

frmProgressBar.Controls.ProgressBarAll.Value = frmProgressBar.Controls.ProgressBarAll.Value + 1;

If AllCells < 2 Then
Continue; // Пустой лист
EndIf;

frmProgressBar.Controls.ProgressBarCur.MaxValue = AllStrings;
frmProgressBar.Controls.ProgressBarCur.Value = 0;

For CurrentString = 1 To AllStrings Do

For CurrentColumn = 1 To AllColumns Do

frmProgressBar.Controls.InfoProgressBarCur.Value = "Обрабатывается строка №: " +
TrimAll(CurrentString) +
" из " + AllStrings +
", колонка №: " +
TrimAll(CurrentColumn) +
" из " + AllColumns;

Try
CurrentCell = WorkSheet.Cells(
CurrentString,
CurrentColumn
);
SlcCell = SprDoc.Area(
CurrentString,
CurrentColumn,
CurrentString,
CurrentColumn
);

SlcCell.RowHeight = CurrentCell.RowHeight;
SlcCell.ColumnWidth = CurrentCell.ColumnWidth;

// Горизонтальное положение
SlcCell.HorizontalAlign = mListHorizontalAlign.Get(
Format(CurrentCell.HorizontalAlignment, "NG=0")
);

// Вертикальное положение
SlcCell.VerticalAlign = mListVerticalAlign.Get(
Format(CurrentCell.VerticalAlignment, "NG=0")
);

// Размещение текста
SlcCell.TextPlacement = ?(
CurrentCell.WrapText = 0,
SpreadsheetDocumentTextPlacementType.Auto,
SpreadsheetDocumentTextPlacementType.Wrap
);

FontCell = CurrentCell.Font;

// Цвет фона
SlcCell.BackColor = mColorRGB(
CurrentCell.Interior.Color
);

// Цвет текста
SlcCell.TextColor = mColorRGB(
FontCell.Color
);


SlcCell.Font = New Font(
FontCell.Name,
Number(FontCell.Size),
?(Number(FontCell.Bold) = 0,
False, True),
?(Number(FontCell.Italic) = 0,
False, True),
?(Format(Number(FontCell.Underline),"NG=0") = "-4142",
False, True),
?(FontCell.Strikethrough, // Зачеркнутый шрифт
True, False)
);

SlcCell.Text = CurrentCell.Value;

// Рамка
Try
SlcCell.LeftBorder = mStyleBorder(CurrentCell, 7);
SlcCell.TopBorder = mStyleBorder(CurrentCell, 8);
SlcCell.RightBorder = mStyleBorder(CurrentCell, 10);
SlcCell.BottomBorder = mStyleBorder(CurrentCell, 9);
Except
EndTry;

SlcCell.Details = CurrentCell.Formula;

// Объединение ячеек
If (CurrentCell.MergeCells <> 0) and
(Find(CurrentCell.MergeArea.Rows.Address(,, 2),
CurrentCell.Address(,, 2)) = 1) Then

SlcCell = SprDoc.Area(
CurrentString,
CurrentColumn,
(CurrentString + CurrentCell.MergeArea.Rows.Count - 1),
(CurrentColumn + CurrentCell.MergeArea.Columns.Count - 1)
);
SlcCell.Merge();

EndIf;

Except

Message(ErrorDescription());

EndTry;

EndDo;

frmProgressBar.Controls.ProgressBarCur.Value = frmProgressBar.Controls.ProgressBarCur.Value + 1;
UserInterruptProcessing(); // Прерывание пользователя Ctrl+Break

EndDo;

SprDoc.Show("" + TrimAll(FileName) + ", лист " + NumberSheet,"");

EndDo;

frmProgressBar.Close();

ExcelApplication = "";

EndProcedure // ButtonExecuteClick()
Разместил:   Версии: | 7.x | 8.x | 8.2 УП |  Дата:   Прочитано: 30918
 +6 
Распечатать
Возможно, вас также заинтересует
Excel файл как Внешний источник данных 4
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel" . ...
Активация открытой книги Excel для корректировки 0
Нужно было получить для изменения уже открытую книгу Excel, а если она закрыта, то открыть и изменять. Ниже код, который данную задачу решает. Попытка Эксель = Неопределено; Книга = Неопределено; Лист = Неопределено; ...
Быстрая выгрузка отчетов в Excel, наложение Фильта и отображение ярлыка 0
Вместо Таб.Показать() используем глобальную функцию - и отчет показывается сразу в Excel в удобоваримом виде - с форматированием колонок по ширине, автофильтром и ярлычками листов Процедура...
Быстрая загрузка данных большого размера файла Excel в многомерный Массив 0
// OldthiefXXX Перем СерверExcel; Процедура КнопкаВыполнитьНажатие(Кнопка) ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС); КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count; ...
Быстрая функция чтения данных с листа Excel 6
При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу...
Посмотреть все результаты поиска похожих
Комментарии
VARYvary
29.09.2016 12:40Комментарий: 18
VARYvary

респект))))) просто невероятно удобная и полезная вещь))))))

john_br
03.12.2013 09:33Комментарий: 17
john_br
Спасибо! Очень полезная обработина.
WyTT
17.07.2013 12:48Комментарий: 16
WyTT
Спасибо, сильно помогло!
Jurij
06.03.2013 20:04Комментарий: 15
Jurij
Классец! Если кому-чего не хватает, всегда можно "напильником придать нужную форму" ;)
igordynets
27.02.2013 12:01Комментарий: 14
igordynets
Огроменное спасибо за действительно полезную обработку!
crabzzy
21.01.2013 21:11Комментарий: 13
crabzzy
Спасибо, дружище, за избавление от рутинной работы!!!
vpereskokov
05.12.2012 14:01Комментарий: 12
vpereskokov
Огромное спасибо!!!!
brasher
22.10.2012 22:06Комментарий: 11
brasher
Спасибо. Очень помогла
igor-1c8
26.05.2012 10:24Комментарий: 10
igor-1c8
Большое спасибо. Очень приятно воспользоваться твоей помощью.
alfida
02.03.2012 15:59Комментарий: 9
alfida
спасибо! преполезнейшая вещь!
irik
17.01.2012 11:14Комментарий: 8
irik
Спасибо! Рада что нашла обработку для конвертации для 1С 8.х.
nikgol
21.12.2011 17:02Комментарий: 7
nikgol
Спасибо
HelenN
26.11.2011 12:57Комментарий: 6
HelenN
спасибо большое! очень в тему обработка в данный момент
maxxmaxx
09.11.2011 11:31Комментарий: 5
maxxmaxx
Спасибо огромное!
grigory_step
19.10.2011 17:04Комментарий: 4
grigory_step
Спасибо!!
Всего 18 на 2 страницах по 15 на каждой странице
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.