Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Turn columns into separate text frames

New Here ,
Apr 17, 2022 Apr 17, 2022

Hi,

 

I have a question about text frames in InDesign. It should probably be easily solvable, but for some reason, I can't seem to find the solution. I am working with a template that uses multiple columns and threading text. Now I want to split the columns into separate text frames, so I can change the height of each column individually. Is there an easy way to do this? I added a picture of how it looks now. Screenshot 2022-04-17 131328.jpg

TOPICS
How to
1.6K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Apr 17, 2022 Apr 17, 2022

Unfortunately, there is no way to automatically split a multiple columns frame into multiple one column frames. You have to do it manully : resize the existing frame, create 2 other frames then thread them. Maybe a script exists, but I don't know it.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Apr 17, 2022 Apr 17, 2022

You could use a frame with a stroke/fill of none with text wrap to force the text to move to another column.

David Creamer: Community Expert (ACI and ACE 1995-2023)
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Apr 17, 2022 Apr 17, 2022

No need to spilt the text columns at all. What you want to do is change your layout to three individual (but still threaded) text frames of 1 column, as opposed to one text frame that has 3 columns in it.

If your page doesn't currnetly have column guides, add them.

Screen Shot 2022-04-17 at 1.05.31 PM.png

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Apr 17, 2022 Apr 17, 2022

The easiest way is to do it by hand.

 

1a.jpg

 

  • 1b.jpgFirst, Get your Selection/Arrow tool. Select your three-column block of text. Go to the Control Panel at the top of the document window and change the number of columns from three to one, as shown at right.

 

  • 1d.jpgSecond, select the Layout>Margin and Columns menu command to open the dialog box. Move down to the Columns: edit box and change it to 3, then click the OK button. This will make it easier for you to line up the columns and size the width equally.

 

1c.jpg

 

  • Third, move the right side margin for the text to the right edge of the first column. Since you've already set your column guides, sizing them will be easy. Release the mouse button to create your first separate, but linked, text frame.

 

 

1e.jpg

  •  Fourth, click in the bubble with the red + sign in the lower-right quarter of the first column. Click on it to pick up the Text Place Gun with your cursor. move the cursor to the upper-left of the second column, then hold down the left mouse button to drag down and to the right to create a second text frame the size of the first one in the second column. Click in the red + sign in the lower-right quarter of the second column, and repeat the process.

 

After that, you can adjust the bottom of each column to line up as you wish.

 

Hope this helps,

 

Randy

 

 

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Oct 21, 2025 Oct 21, 2025

SOOOOO HELPFUL!!!!!!!!!!!!! Thank you!!!!!!!!!!!!!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 21, 2025 Oct 21, 2025

Glad I could help. 

 

If you get stuck with InDesign — or any Adobe app, for that matter — come back to the appropriate forum and sound the alarm. There are lots of sharp folks around here who are happy to lend a hand.

 

Randy

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 21, 2025 Oct 21, 2025

Be sure you check out the script @Eugene Tyson linked to. Doing it manually is OK for a page or two, but if you have a number of pages, the script is _way_ faster. 

 

David Creamer: Community Expert (ACI and ACE 1995-2023)
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 22, 2025 Oct 22, 2025

Hi @Dave Creamer of IDEAS - thanks for the shout out - prompts me to follow up

 

I made a few changes for my own needs - allow to set indents for the column to frame, as I often have specific layouts that text cannot pop out of the frame edge. So it insets the text frames

 

You can change the insets to suit your own needs. Think it also adds vertical justification. 
You can get more alignment options here

https://www.indesignjs.de/extendscriptAPI/indesign-latest/#VerticalAlignment.html

 

 

// Columns2Frames.jsx
/*
	This InDesign script can be used for replacing textframe columns with individual text frames.
	//Original author: Steve Wareham, www.stevewareham.com
	Updated for CS5 by Olav Martin Kvern

	Select a textframe first, then run the script.
*/
main();
function main(){
	if ((app.selection.length != 1 )||(app.selection[0].constructor.name != "TextFrame")) {
		alert("Please select a text frame and try again.");
	}
	else{
		// Get properties of textframe
		var myDocument = app.documents.item(0);
		var myTextFrame = app.selection[0];
		var myTextFramePrev = myTextFrame.previousTextFrame;
		var myTextFrameNext = myTextFrame.nextTextFrame;
		var myColAmount = myTextFrame.textFramePreferences.textColumnCount;
		var myMultipleCols = myColAmount - 1;  // The cols. after the first one
		var myTextFrameBounds =  myTextFrame.geometricBounds;
		var myGutterWidth = myTextFrame.textFramePreferences.textColumnGutter;
		var myColWidth = ( (myTextFrameBounds[3] - myTextFrameBounds[1]) - (myGutterWidth * myMultipleCols) ) / myColAmount; 
		var myGutterAmount = myTextFrame.textFramePreferences.textColumnCount;
		var myVerticalJustification = myTextFrame.textFramePreferences.verticalJustification;
		var myInsets = [0.5, 0.3, 1, 0.3]; // [top, left, bottom, right] in mm
		// Convert insets to points (1 mm = 2.83465 points)
		for (var j = 0; j < myInsets.length; j++) {
			myInsets[j] = myInsets[j] * 1;
		}

		// Find the first textFrame in the thread that myTextFrame is in, get its contents
		var myFirstTextFrame = myTextFrame; 
		while (myFirstTextFrame.previousTextFrame instanceof TextFrame){
			myFirstTextFrame = myFirstTextFrame.previousTextFrame;
		}
		var myContents = myFirstTextFrame.contents;
		// Find the page to work on
		var myPage = findPage(myTextFrame);	
		if (myPage == null)
		{
			alert("The text frame needs to be on a page for this script to run.");
			myColAmount = 0; // Set myColAmount to 0 so the script doesn't run
		}
		// Create individual text frames if the original has more than one column
		if (myColAmount > 1){
			myTextFrame.name = "marked"; // Mark original textframe for removal
			var myNewFrames = new Array();						
			// Create text frame for col. 1
			myNewFrames[0] = myPage.textFrames.add();
			myBounds = new Array();
			myBounds[0] = myTextFrameBounds[0];
			myBounds[1] = myTextFrameBounds[1];
			myBounds[2] = myTextFrameBounds[2];
			myBounds[3] = (myTextFrameBounds[1] + myColWidth);
			myNewFrames[0].geometricBounds = myBounds;
			myNewFrames[0].label = "0";
			myNewFrames[0].textFramePreferences.properties = {
				textColumnCount: 1,
				insetSpacing: myInsets,
				verticalJustification: myVerticalJustification
			};
			// Create text frames for col. 2 -> end
			for (i = 1; i <= myMultipleCols; i ++){
				myNewFrames[i] = myPage.textFrames.add();
				myBounds[1] = myBounds[3] + myGutterWidth;
				myBounds[3] = (myBounds[1] + myColWidth);
				myNewFrames[i].geometricBounds = myBounds;
				myNewFrames[i].label = (i + "") ;
				myNewFrames[i].textFramePreferences.properties = {
					textColumnCount: 1,
					insetSpacing: myInsets,
					verticalJustification: myVerticalJustification
				};
			}
			// Link the new frames.
			for (i = myMultipleCols; i > 0; i --){
				j = i - 1;	
				myNewFrames[i].previousTextFrame = myNewFrames[j];	
			}			
			// If the text frame was part of a thread, relink the new frame to the thread
			if (myTextFramePrev != null){ // If there was a frame before
				myNewFrames[0].previousTextFrame = myTextFramePrev;
			}
			// If there was no frame before, but a frame after	
			if((myTextFrameNext != null)&&(myTextFramePrev == null)){
				myNewFrames[myMultipleCols].nextTextFrame = myTextFrameNext;
			}		
			 // If there are no frames before or after
			if((myTextFramePrev == null)&&(myTextFrameNext == null)){ 
				myDocument.textFrames.itemByName("marked").nextTextFrame = myNewFrames[0];
			}
			// Remove original textFrame
			myDocument.textFrames.itemByName("marked").remove();
		}
	}
}

// Use the findPage function to get the page the textframe is on
function findPage(theObj){
	var thePage = theObj.parentPage;
	return thePage;
}

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 22, 2025 Oct 22, 2025

The original post is 3 years old, but another option, which I don’t think was mentioned, would be a Column Break character. There would be some advantages in keeping the 3 column text frame—i.e., you want to change the gutter dimension sometime on the future.

 

Screen Shot 4.png

 

Screen Shot 3.png

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 22, 2025 Oct 22, 2025
LATEST

Yeh, the column break is fine, if you are vertically top aligned, I think if it's vertically justified it is not so useful. 

One of those nagging feature requests I keep meaning to put in. 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Apr 18, 2022 Apr 18, 2022

There's a script to do this

https://creativepro.com/convert-multicolumn-text-frames-to-individual-frames-script/

 

----------------------

 

The manual way 

 

Select all the text (CTRL A or CMD A)

Cut it

Delete the 1 frame

 

Layout>Margins and Columns

Add the amount of columns you need (if not already setup)

 

Draw a text frame in the first column

Paste in your text

 

You now have 1 column text frame

Click the overset text red plus at the bottom

Shift click the top left of the next empty column

 

And it will autoflow the next columns,

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines