Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   макрос для Excel в javascript (https://javascript.ru/forum/css-html-internet-explorer/29655-makros-dlya-excel-v-javascript.html)

klicken 06.07.2012 11:58

макрос для Excel в javascript
 
Подскажите пожалуйста как лучше переделать этот макрос на javascript

Sub test()
With Application
.UseSystemSeparators = True
End With
Dim LastCell As Range: Set LastCell = Range("B65536").End(xlUp).Offset(1)
LastCell.FormulaR1C1 = "=SUM(R1C:R[-1]C)"
LastCell.AutoFill LastCell.Resize(, 2)
LastCell.EntireRow.Cells(1) = "Итог:"

End Sub

klicken 06.07.2012 12:07

Может это глупый вопрос)
Подскажите тогда где почитать про это

lord2kim 06.07.2012 12:26

Цитата:

Сообщение от klicken (Сообщение 186689)
Подскажите пожалуйста как лучше переделать этот макрос на javascript

Sub test()
With Application
.UseSystemSeparators = True
End With
Dim LastCell As Range: Set LastCell = Range("B65536").End(xlUp).Offset(1)
LastCell.FormulaR1C1 = "=SUM(R1C:R[-1]C)"
LastCell.AutoFill LastCell.Resize(, 2)
LastCell.EntireRow.Cells(1) = "Итог:"

End Sub

не на javascript, а на JScript)
а что он делает то?)
много чего есть в книге VBA и программирование в MS Office для пользователей

klicken 06.07.2012 12:33

Sub test()
With Application
.UseSystemSeparators = True //устанавливает системный разделитель, чтобы у всех пользователей была "." между целой и дробной части в числах
End With
Dim LastCell As Range: Set LastCell = Range("B65536").End(xlUp).Offset(1)
LastCell.FormulaR1C1 = "=SUM(R1C:R[-1]C)"
LastCell.AutoFill LastCell.Resize(, 2)
LastCell.EntireRow.Cells(1) = "Итог:"
// находит последнее число в столбце, и в пустую ячейку записывает сумму столбца
End Sub

lord2kim 06.07.2012 12:34

Цитата:

Сообщение от klicken (Сообщение 186689)
Подскажите пожалуйста как лучше переделать этот макрос на javascript

Sub test()
With Application
.UseSystemSeparators = True
End With
Dim LastCell As Range: Set LastCell = Range("B65536").End(xlUp).Offset(1)
LastCell.FormulaR1C1 = "=SUM(R1C:R[-1]C)"
LastCell.AutoFill LastCell.Resize(, 2)
LastCell.EntireRow.Cells(1) = "Итог:"

End Sub

function test() {
	with (Application) {
		.UseSystemSeparators = true;
	}
	var LastCell = Range("B65536").End(xlUp).Offset(1);
	LastCell.FormulaR1C1 = "=SUM(R1C:R[-1]C)";
	LastCell.AutoFill LastCell.Resize(, 2);
	LastCell.EntireRow.Cells(1) = "Итог:";
}

klicken 06.07.2012 12:38

Спасибо большое!

klicken 06.07.2012 12:41

<html>
<head>
<input type='button' value='Excel';
onClick="javascript:
var xls = new ActiveXObject ( 'Excel.Application' );
xls.visible = true;
var newBook = xls.Workbooks.Add;
newBook.Worksheets.Add;
newBook.Worksheets(1).Activate;
newBook.Worksheets(1).Cells(1,1).value='1.25, 3.82';
newBook.Worksheets(1).Cells(2,1).value='2.1, 1';
newBook.Worksheets(1).Cells(1,2).value='1, 4';
newBook.Worksheets(1).Cells(2,2).value='10 , 12';
newBook.Worksheets(1).Name='WorkSheet from Javascript';

function test() {
with (Application) {
.UseSustemSeparators = true;
}
var LastCell = Range('B65536').End(xlUp).Offset(1);
LastCell.FormulaR1C1 = '=SUM(R1C:R[-1]C)';
LastCell.AutoFill LastCell.Resize(, 2);
LastCell.EntireRow.Cells(1) = 'Итог:';
}
"

// newBook.Worksheets(1).SaveAs('C:\\temp\\TEST2.XLS' );

</head>
</html>

как его модернизировать?)

lord2kim 06.07.2012 12:50

Цитата:

Сообщение от klicken (Сообщение 186705)
<html>
<head>
<input type='button' value='Excel';
onClick="javascript:
var xls = new ActiveXObject ( 'Excel.Application' );
xls.visible = true;
var newBook = xls.Workbooks.Add;
newBook.Worksheets.Add;
newBook.Worksheets(1).Activate;
newBook.Worksheets(1).Cells(1,1).value='1.25, 3.82';
newBook.Worksheets(1).Cells(2,1).value='2.1, 1';
newBook.Worksheets(1).Cells(1,2).value='1, 4';
newBook.Worksheets(1).Cells(2,2).value='10 , 12';
newBook.Worksheets(1).Name='WorkSheet from Javascript';

function test() {
with (Application) {
.UseSustemSeparators = true;
}
var LastCell = Range('B65536').End(xlUp).Offset(1);
LastCell.FormulaR1C1 = '=SUM(R1C:R[-1]C)';
LastCell.AutoFill LastCell.Resize(, 2);
LastCell.EntireRow.Cells(1) = 'Итог:';
}
"

// newBook.Worksheets(1).SaveAs('C:\\temp\\TEST2.XLS' );

</head>
</html>

как его модернизировать?)

<html>
<head>
<title>Excel</title>
<script>
function test() {
	var xls = new ActiveXObject ( 'Excel.Application' );
	xls.visible = true;
	var newBook = xls.Workbooks.Add;
	newBook.Worksheets.Add;
	newBook.Worksheets(1).Activate;
	newBook.Worksheets(1).Cells(1,1).value='1.25, 3.82';
	newBook.Worksheets(1).Cells(2,1).value='2.1, 1';
	newBook.Worksheets(1).Cells(1,2).value='1, 4';
	newBook.Worksheets(1).Cells(2,2).value='10 , 12';
	newBook.Worksheets(1).Name='WorkSheet from Javascript';
	
	with (Application) {  
		.UseSustemSeparators = true;  
	}  
	var LastCell = Range('B65536').End(xlUp).Offset(1);  
	LastCell.FormulaR1C1 = '=SUM(R1C:R[-1]C)';  
	LastCell.AutoFill LastCell.Resize(, 2);  
	LastCell.EntireRow.Cells(1) = 'Итог:';  
}
</script>
</head>
<body>
<input type='button' value='Excel' onClick="test()">
</body>
</html>

и лучше все это запихнуть в HTML Application (.hta), чтобы никаких запросов на разрешение выполнения ActiveX-объектов не появлялось...

klicken 06.07.2012 13:07

Цитата:

Сообщение от lord2kim (Сообщение 186707)
<html>
<head>
<title>Excel</title>
<script>
function test() {
	var xls = new ActiveXObject ( 'Excel.Application' );
	xls.visible = true;
	var newBook = xls.Workbooks.Add;
	newBook.Worksheets.Add;
	newBook.Worksheets(1).Activate;
	newBook.Worksheets(1).Cells(1,1).value='1.25, 3.82';
	newBook.Worksheets(1).Cells(2,1).value='2.1, 1';
	newBook.Worksheets(1).Cells(1,2).value='1, 4';
	newBook.Worksheets(1).Cells(2,2).value='10 , 12';
	newBook.Worksheets(1).Name='WorkSheet from Javascript';
	
	with (Application) {  
		.UseSustemSeparators = true;  
	}  
	var LastCell = Range('B65536').End(xlUp).Offset(1);  
	LastCell.FormulaR1C1 = '=SUM(R1C:R[-1]C)';  
	LastCell.AutoFill LastCell.Resize(, 2);  
	LastCell.EntireRow.Cells(1) = 'Итог:';  
}
</script>
</head>
<body>
<input type='button' value='Excel' onClick="test()">
</body>
</html>

и лучше все это запихнуть в HTML Application (.hta), чтобы никаких запросов на разрешение выполнения ActiveX-объектов не появлялось...

Спасибо, сохранил как Вы и сказали, debugger выдает ошибку после нажатия на кнопку Excel ...

lord2kim 06.07.2012 13:26

Цитата:

Сообщение от klicken (Сообщение 186709)
Спасибо, сохранил как Вы и сказали, debugger выдает ошибку после нажатия на кнопку Excel ...

уберите первую точку в 18строке
в 22 строке все так и должно быть даже на VBA?
LastCell.AutoFill LastCell.Resize(, 2);

AutoFill() это метод для автоматического заполнения диапазона [читать здесь], и в скобках перед запятой наверно тоже цифорки не хватает [читать здесь]
LastCell.AutoFill(); LastCell.Resize(3, 2);


Часовой пояс GMT +3, время: 20:48.