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

Преобразование 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 УП |  Дата:   Прочитано: 63728
 +11 
Распечатать
Возможно, вас также заинтересует
Excel файл как Внешний источник данных 17
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel" . https://helpf.pro/uploads/img
Активация открытой книги Excel для корректировки 0
Нужно было получить для изменения уже открытую книгу Excel, а если она закрыта, то открыть и изменять. Ниже код, который данную задачу решает. Попытка Эксель = Неопределено; Книга = Неопределено; Лист = Неопределено; Состояние(" Выполняется
Быстрая выгрузка отчетов в Excel, наложение Фильта и отображение ярлыка 0
Вместо Таб.Показать() используем глобальную функцию - и отчет показывается сразу в Excel в удобоваримом виде - с форматированием колонок по ширине, автофильтром и ярлычками листов Процедура глОткрытьВЭкселе(Таб,ИмяФайла=" " ,НеИзменятьВысотуСтроки=0
Быстрая загрузка данных большого размера файла Excel в многомерный Массив 0
// OldthiefXXX Перем СерверExcel; Процедура КнопкаВыполнитьНажатие(Кнопка) ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС); КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count; КоличествоКолонокДанных=ФайлХЛС.ActiveSheet
Быстрая функция чтения данных с листа Excel 11
При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу значений сокращается в десятки ра
Посмотреть все результаты поиска похожих
Комментарии
ivvidom
03.02.2021 10:36Комментарий: 21
ivvidom

Добрый день! После скачивания как осуществить обработку файла excel в файл mxl?

Kovalev_DG
24.09.2019 14:01Комментарий: 20
Kovalev_DG

Кстати в 8.3 можно открыть экселевскеий файл и сохранить его в xml ... т.е. обработка классная, но уже устарела.

Kovalev_DG
24.09.2019 12:43Комментарий: 19
Kovalev_DG

Спасибо!

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
Спасибо
Всего 21 на 2 страницах по 15 на каждой странице
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!