Разместить информацию в таблице

  • Автор темы Автор темы Kozerog
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kozerog

Участник
Топикстартер
Сообщения
37
Реакции
0
Постановка задачи

Есть шаблон таблицы(шапка и N колонок)

При верстке каждый раз в таблицу нужно засовывать информацию
из Базы Данных.

В каком виде ее лучше подать в ID, что-бы она встала в нужные колонки и не испортила стили в шаблоне таблицы.
 
Ответ: Разместить информацию в таблице

1. Если кроме шапки и пустой таблицы в ИД ничего нет и требуется вставить таблицу с данными извне, то самое простое, удобное и быстрое решение - SmartStyle. Тем более, если все таблицы однотипные.
2. Если все-таки в таблице присутствует какой-то другой постоянный текст, которого нет в базе данных, то можно воспользоваться InCopy.
3. В любом случае можно написать скрипт и пользоваться им.
 
Ответ: Разместить информацию в таблице

Извините, что такое SmartStyle ?
 
Ответ: Разместить информацию в таблице

Kozerog
Получаю ехсел файл, обрабатываю его макросом в екселе и получаю тхт файл (пикча №1), потом тупо загружаю все в индиз скриптом (пикча №2)
-----------------------
забыл про скрипт... этакая солянка....

PHP:
with(app){
var counter = 1;
var save_count = 0;
// var myErrorCount = 0;
var counter = 1;
var save_count = 0;
var myErrorCount = 0;
var myDataName = "rates";
var myChangeFrom = [" - ","%", "$"]
var myChangeTo = ["^>—^>","^<%", "$^<"]

//////////////////////////////////////////////////////////////
if(app.documents.length==0){
	alert("No InDesign documents are open!");
	exit();
}

//Проверяем, что у нас выделено
	if ((selection.length == 1)&&((selection[0].constructor.name == "TextFrame"))) {
	} else {
		alert("Необходимо выделить Text Frame");
		exit();
	}
	//Get the path to the currently-running file.
	var myStory = selection[0].parentStory;
 
 var myTable = myStory.tables[0]
 var doc = app.activeDocument.fullName;
	var mydoc = File(doc);
	var myFolder = mydoc.parent;
	var myDataFolder = myFolder + "/" + myDataName;
	myDataFolder = Folder(myDataFolder);
	
		for (counter = 0; counter < 5; counter++){

		//Try to find a text file named "rates.txt" in the same folder as the file.
		myFileName = myDataFolder + "/" + myDataName + ".txt";
		myFile = File(myFileName);

		//Try to open the file.
		myResult = myFile.open("r", undefined, undefined);
		
		//If we couldn't find the file, then display a msg box and exit.
		if(myResult != false){
		var myCols = myTable.columns
		var MyData = ""
		myRows = myTable.rows; 
		
		for( var x = 0; x < 4; x++ ) {
			for( var i = save_count ; i <= (save_count + 5); i++ ) {
				MyData = myFile.readln(); 
				myTable.rows[i].cells[x].contents = MyData;
			} 
		}

		save_count = i + 1

		for( var x = 0; x < 4; x++ ) {
			for( var i = save_count ; i <= (save_count + 5); i++ ) {
				MyData = myFile.readln(); 
				myTable.rows[i].cells[x].contents = MyData;
			} 
		}

		save_count = i + 1

		for( var x = 0; x < 4; x++ ) {
			for( var i = save_count ; i <= (save_count + 5); i++ ) {
				MyData = myFile.readln(); 
				myTable.rows[i].cells[x].contents = MyData;
			} 
		}
		
		save_count = i + 1

		for( var x = 0; x < 4; x++ ) {
			for( var i = save_count ; i <= (save_count + 5); i++ ) {
				MyData = myFile.readln(); 
				myTable.rows[i].cells[x].contents = MyData;
			} 
		}
			myFile.close();

//Получаем все файлы (и вложенные папки) в выбранной папке

	var myFiles = myDataFolder.getFiles();

	for (myCounter = 0; myCounter < myFiles.length; myCounter++) {
//Проверяем объект на соответствие типу
		if (myFiles[myCounter].constructor.name == "File") {
//Находим, каким должно быть имя файла в тексте в зависимости от выбранных настроек
			var myFileName = myFiles[myCounter].name;
//Преобразуем имя в строку
			myFileName = String(myFileName);
//Объединяем имя с тэгами
			var myFindString = "[img]" + myFileName + "[/img]";
//			var myFindString = myFileName;
//Ищем имя с тэгами в тексте
			var myFindResult = myStory.search(myFindString, undefined, false);
//Если что-то нашли
			if (myFindResult.length > 0) {
//Подготавливаем имя файла
				var myName = decodeURI(myFiles[myCounter]);
//Делаем реверс массива найденных
				myFindResult.reverse();
//Для каждого элемента в массиве
				for (counter = 0; counter < myFindResult.length; counter++) {
//Пытаемся на место элемента вставить файл
					try {
						myFindResult[counter].place(File(myName));
//При ошибке увеличиваем счетчик ошибок
					} catch (error) {
						myErrorCount++;
					}
				}
			}
		}
	}
	
	for( var i = 0 ; i < myChangeFrom.length; i++ ) {
		myFoundItems = app.selection[0].search(myChangeFrom[i], false, true, myChangeTo[i]);
	}
	
//Если ошибки происходили, предупреждаем о количестве
	if (myErrorCount > 0) {
		alert(String(myErrorCount) + " " + langErrors);
		exit();
	}
//Обнуляем свойства поиска
	findPreferences = null;
	exit();
		}else{
		myFolder = myFolder.parent;
		}
		}
	alert("File " + myFileName + " not found");
	exit();
}
 

Вложения

  • 01.gif
    01.gif
    15.3 КБ · Просм.: 529
  • 02.gif
    02.gif
    115.6 КБ · Просм.: 1 019
Ответ: Разместить информацию в таблице

=> Дмитрию Сахарову

Как я понял SmartStyle это какое-то расширение к ID, которое нужно покупать.

Нельзя ли решить задачу чисто средствами ID.

Мне никто SmartStyle не подарит.
 
Ответ: Разместить информацию в таблице

==> V.V.Putinu

1. У Вас таблица заранее создана ?
2.Пр подкачке скриптом свойства(стили и пр) таблицы не портятся ?
3.На каком языке написан скрипт?
 
Ответ: Разместить информацию в таблице

Kozerog
1. Да
2. Пока нет
3. JavaScript
 
Ответ: Разместить информацию в таблице

Получаю ехсел файл, обрабатываю его макросом в екселе и получаю тхт файл (пикча №1)

А этот макрос опубликовать можно?
 
Ответ: Разместить информацию в таблице

iv-mi
Можно, только макрос этот не универсален, узко заточен под мои нужды
PHP:
Option Explicit
Public ind As Integer
Public startRange As String
Public endRange As String
Public curRange As String
Public myString As String
Public Const myNextIssueFile = "\_Next_Issue.txt"
Public myFile
Public fso
----------
Sub rates()

Dim myFilePath As String

Dim myLoop As Integer
myFilePath = ActiveWorkbook.Path
 
Set fso = CreateObject("Scripting.FileSystemObject")
Set myFile = fso.CreateTextFile(myFilePath & "\rates.txt", True)

startRange = "B1"
endRange = "B36"
curRange = ""
Range(startRange).Select
 
myLoop = 1

Do While curRange <> endRange
 
 myString = ActiveCell.Value

 If UCase(ActiveCell.Value) = "LOAN TYPE" Or ActiveCell.Value = "TYPE" Then
 
 Select Case myLoop
 Case 1
 ActiveCell.Value = "MORTGAGES"
 Case 2
 ActiveCell.Value = "HOME EQUITY"
 Case 3
 ActiveCell.Value = "AUTO LOAN"
 Case 4
 ActiveCell.Value = "CDs & INVESTMENTS"
 End Select
 
 myFile.WriteLine (Trim(ActiveCell.Value))
 Call get5column(False)

 ActiveCell.Offset(rowOffset:=-5).Activate
 ActiveCell.Offset(ColumnOffset:=2).Activate
 
 If Trim(ActiveCell.Value) = "TODAY" Then ActiveCell.Value = getNextIssueDate(myFilePath)
 myFile.WriteLine (Trim(ActiveCell.Value))
 Call get5column(False)

 ActiveCell.Offset(rowOffset:=-5).Activate
 ActiveCell.Offset(ColumnOffset:=1).Activate
 myFile.WriteLine (Trim(ActiveCell.Text))
 Call get5column(True)
 
 ActiveCell.Offset(rowOffset:=-5).Activate
 ActiveCell.Offset(ColumnOffset:=1).Activate
 
 If Trim(ActiveCell.Value) = "LAST WEEK" Then ActiveCell.Value = "НА ПРОШЛОЙ НЕДЕЛЕ"
 myFile.WriteLine (Trim(ActiveCell.Value))
 
 Call get5column(False)
 
 ActiveCell.Offset(ColumnOffset:=-4).Activate
 myLoop = myLoop + 1
 End If
 
 ActiveCell.Offset(rowOffset:=1).Activate
 curRange = myGetCol(ActiveCell.Address) & myGetRow(ActiveCell.Address)
Loop
 
 myFile.Close

End Sub
----------
Sub get5column(image As Boolean)
 For ind = 1 To 5
 ActiveCell.Offset(rowOffset:=1).Activate
 If image = True Then
 myFile.WriteLine ("[img]" & Trim(ActiveCell.Value) & Trim("[/img]"))
 Else
 myFile.WriteLine (Trim(ActiveCell.Text)) '
 End If
 Next
End Sub
----------
Public Function myGetRow(ByVal rngIpnut As String) As String
 Dim pos As Long
 
 pos = InStr(2, rngIpnut, "$", vbTextCompare)
 
 If pos > 0 Then
 myGetRow = Right(rngIpnut, Len(rngIpnut) - pos)
 End If
 
End Function
----------
Public Function myGetCol(ByVal rngIpnut As String) As String
 Dim pos As Long
 
 pos = InStr(2, rngIpnut, "$", vbTextCompare)
 
 If pos > 0 Then
 myGetCol = Replace(Left(rngIpnut, pos), "$", "", 1, , vbTextCompare)
 End If
 
End Function
----------
Function getNextIssueDate(myPath As String) As String
Dim myIssueFile
Dim counter As Integer
Dim strPos As Integer, endPos As Integer

For counter = 0 To 5

 If fso.FileExists(myPath & myNextIssueFile) = True Then
 Set myIssueFile = fso.OpenTextFile(myPath & myNextIssueFile, 1, 0)
 myString = myIssueFile.ReadLine
 strPos = InStr(17, myString, ", ", vbTextCompare)
 endPos = InStr(1, myString, "200", vbTextCompare)
 getNextIssueDate = Mid(myString, strPos + 1, endPos - (strPos + 2))
 Exit Function
 Else
 Set fso = CreateObject("Scripting.FileSystemObject")
 myPath = fso.GetParentFolderName(myPath)
 End If

Next

End Function
 
Ответ: Разместить информацию в таблице

макрос этот не универсален, узко заточен под мои нужды
Спасибо, V.V. Putin, этого достаточно для отправной точки.
 
Ответ: Разместить информацию в таблице

==> Putinu V.V

Можно уточнить Ваш способ решения

1.Исходный текстовый файл должен:
- содержать поля разделенные табулятором, запятой или другим спецзнаком?
- в конце каждой строки ЗНАК окончания строки ?
- называться rates.txt
- находиться в директории ?

2.Таблица в ID должна
- быть выделена
- добавление ВСЕХ данных в таблицу ?
- количество колонок в таблице фиксированно(кажется 4) ?

- как добавить данные в конец не пустой таблицы ?
 
Статус
Закрыто для дальнейших ответов.