// Выбор файла 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()