How do you force excel to quote all columns of a CSV file?

93

28

Excel only places quotes around certain fields, how do I force excel to save a CSV file with quotes around every column?

Michael Shnitzer

Posted 2010-04-13T19:17:39.483

Reputation: 1 207

Answers

46

If you open the XLS file in LibreOffice or OpenOffice, then Save As....and choose Text CSV, it alows generating a CSV file that also includes quotes as delimiters. E.g.: "Smith","Pete","Canada" "Jones","Mary","England"

Just check the "Quote all text cells" box: Export to CSV with LibreOffice

In order to also quote numeric fields, highlight your cell range and change the cell formatting to "text" prior to saving.

Pete

Posted 2010-04-13T19:17:39.483

Reputation: 485

I think this is the easiest and most convenient solution since OpenOffice is a portable software. You don't have to install anything or write any codes. – Scott Chu – 2015-04-16T03:12:41.280

best answer ever!! – rajya vardhan – 2016-01-22T08:40:08.060

24Not an answer at all. The question is explicitly about MS Excel – vladkras – 2016-07-05T10:26:17.047

It doesn't put quote if the cell has not string, is there a way for it? – zar – 2016-11-29T20:59:32.633

The question has nothing to do with Excel. It just so happens Excel isn't the only program which can interpret CSV Vladkras. However this answer is still invalid because it ONLY CONVERTS TEXT CELLS. If the cell is numeric, it won't be quoted. The question is about forcing quotes on EVERY column - not just those which resemble text to LibreOffice. – 1owk3y – 2017-03-09T23:53:59.657

7Although not an answer to the specific question it is a simpler workaround than trying to get my clients to use a macro! – Duncanmoo – 2013-11-01T08:35:50.717

I'm tired of using this method every day, that's why I'm here – vladkras – 2014-03-07T06:33:41.373

45

This page also has the solution which comes straight from the horse's mouth:

http://support.microsoft.com/kb/291296/en-us

If the link degrades, the topic to search for is:

"Procedure to export a text file with both comma and quote delimiters in Excel" and/or "Q291296"

tl;dr: use their macro

sahmeepee

Posted 2010-04-13T19:17:39.483

Reputation: 1 589

Office 2010, still overflows on high number of selected rows, just as @sahmeepee mentioned. – access_granted – 2017-08-09T01:00:00.753

10Something that may be worth noting is that macro is using Integer for row and column values. You'll get hit with an error if trying to export greater than 32768 rows. Changing the datatypes to Long, for example, will fix that problem. – Dan – 2013-05-21T18:06:52.517

Good spot (+1). It looks like they haven't updated the code since it was first written for versions of Excel with only 32768 rows max. – sahmeepee – 2013-10-13T13:57:50.723

10

I took the liberty to create a gist with this macro, and a couple of fixes: https://gist.github.com/fabriceleal/7803969

– fableal – 2013-12-05T11:43:24.677

@fableal Great snippet! It deserves to be in an answer. – xiankai – 2013-12-18T01:35:53.670

19

I found this easy solution:

  1. High­light the cells you want to add the quotes.
  2. Right click and go to: For­mat Cells → Tab: Number → Category: Custom
  3. Paste the fol­low­ing into the Type field: "''"@"''" (see details below)
  4. Click “okay”

The string you are pasting is "''"@"''" which is double quote, single quote, single quote, double quote, @ symbol, double quote, single quote, single quote, double quote.

Edited for Excel 2010 from the information found here.

Michael

Posted 2010-04-13T19:17:39.483

Reputation: 191

Hmmm.. that gave me ''ITEM'' (two single quotes) rather than " (one double quote). I just then did a search and replace to fix it. – Clay Nichols – 2016-03-18T22:28:34.020

6The format should have been \”@\” – manat – 2016-11-19T15:31:28.947

This answer was actually a perfect answer if you're using LibreOffice - it totally lacks a "text" option in the Format > Number Format menu, despite their documentation insisting the option is there.

If you right-click "Format Cells" in LibreOffice, you are given a FULL list of cell interpretation options - rather than the somewhat useless 6 options presented in the dropdown. – 1owk3y – 2017-03-09T23:56:36.697

@manat's answer, but without the curly quotes: \"@\" – MSC – 2019-02-07T00:59:57.317

Not able to do a double quote in number field. – Arpit Patel – 2019-12-27T00:28:03.843

14

Powershell appears to dump correctly. so something like

search for powershell.exe on windows machine if you dont know powershell.

import-csv C:\Temp\Myfile.csv | export-csv C:\Temp\Myfile_New.csv -NoTypeInformation -Encoding UTF8

Hope it helps someone.

ssaviers

Posted 2010-04-13T19:17:39.483

Reputation: 366

1For convenience, Shift + right-click in the folder where your CSV is saved and choose Open PowerShell window here, which simplifies the command to import-csv Myfile.csv | export-csv Myfile_quoted.csv -NoTypeInformation -Encoding UTF8. remember to use single-quotes around filenames with spaces or other special characters. – Walf – 2018-11-01T23:45:30.757

Great answer. Thanks @walf for additional information – Venkataraman R – 2019-12-17T11:32:01.210

4

Highlight the cells you want to add the quotes. Go to Format –> Cells –> Custom Copy/Paste the following into the Type field: \”@\” Click “okay” Be happy you didn’t do it all by hand.

From: http://www.lenashore.com/2012/04/how-to-add-quotes-to-your-cells-in-excel-automatically/

Steve Coleman

Posted 2010-04-13T19:17:39.483

Reputation: 141

1This work well for alpha - you will need \”#\” for columns with numeric values. – DropHit – 2017-09-25T02:07:23.767

Between the "@" and "#" this works. But I still have to edit the headers in Notepad++ for the numeric columns, and then replace all """ with ". What a pain. – Gary – 2017-12-08T15:51:08.483

Have not tried it.. but if you are creating a csv couldn't you just change the columns to text and use "@" – Steve Coleman – 2019-09-26T18:00:18.583

4

This was the easiest for me: I imported the spreadsheet into Access 2010 and exported it from there as a delimited text file. Gave me the quote marks around my fields. Takes less than a minute for 42k rows now that I have the steps down.

user326114

Posted 2010-04-13T19:17:39.483

Reputation: 49

The only drawback would be if the field itself contains a double-quote. – access_granted – 2017-08-09T03:01:41.287

3

I have found another work around which doesn't involve the VBA Macro, but which does require Notepad++ or a similar macro-based text editor.

Export your file as Tab-seperated text, then open the exported file within Notepad++. Replace all instances of the 'tab' character with the text "," (ie literally double-quote, comma, double-quote) and then use another macro to prefix and suffix each line of text with a double-quote.

A bit hacky but I found it quicker than getting a VBA macro working.

Blueacid

Posted 2010-04-13T19:17:39.483

Reputation: 39

1If you wanted to do that in Notepad++, you would be best using regular expression search and replace and then you could do all 3 replace operations (start of line, tab and end of line) in one place – sahmeepee – 2015-03-27T19:56:45.010

2

  1. Highlight the cells you want to add the quotes.
  2. Right click and go to: Format Cells → Tab: Number → Category: Custom
  3. Paste the following into the Type field: "''"@"''" (see details below)
  4. Click “okay”
  5. Open the .csv file with Notepad (or equivalent)
  6. Replace all ' ' (repeated single quotes) with " (double quote)
  7. Replace all ;
  8. Save revised .csv file

eric

Posted 2010-04-13T19:17:39.483

Reputation: 21

1

If you use Notepad++ to add quotes to the beginning of each line, just open the exported csv file, put your cursor at 1st line, 1st column, then click menu Edit/Column Editor..., in field 'Text to insert', enter ", then the beginning of each line will have a quote, then you can use regular expression to search/replace all the tabs.

Michael Zhang

Posted 2010-04-13T19:17:39.483

Reputation: 111

0

Another way if you have MS access (I have ver 2007) import the file then export it as a text file. Then change the .txt to .csv. Note all number fields will not have double quotes around it so if you need double quotes around the numbers too then while in Access change the field from a number field to a text field.

Dean

Posted 2010-04-13T19:17:39.483

Reputation: 1

0

Exporting comma separated and quoted strings can be done with only Excel 2016 and Notepad, using a copy of the data, a formula, an export, a file properties change, a replacement in Notepad, saving the exported file and cleanup. Each is a simple step. In detail:

  1. Copy the columns to be exported into a new intermediate sheet to preserve the original and as backup, with the new sheet to be deleted later to leave the spreadsheet as it was.

  2. Put otherwise not occurring character(s), say '#' or ';-)' at each end of a string in the column say A with the formula =concat("#",trim(A1),"#"), putting the formula on all the rows of another column.

    • Adjacent columns can be done at the same time but don't quote numbers to avoid having them read in as strings.
    • The trim avoids any trailing spaces which can trigger unskillful export behavior.
    • Strings should not contain a ' " ' which might perturb import.
  3. Copy the new column(s) back over A..., using the '123' method so as to not carry the formula.

  4. Export the sheet as a CSV file, to put in the commas between fields including numbers.

  5. Change the file.csv properties so that it can be opened with Notepad.

  6. Use Notepad to replace the arbitrary character(s) with ' " '.

  7. While it would seem sensible to use " as the arbitrary character, it has to be put in a different cell, say '$A$50', and then what appears on export is ' " " " ', apparently another inconvenient trigger.

  8. In notepad the file should be saved, becoming a *.txt file to be imported and the intermediate *.csv deleted.

  9. With cleanup of the extra spreadsheet sheet mission accomplished.

Perhaps the Access export tools can one day be embedded in Excel. A more generic approach among those programs that use cut and paste, would be to have the paste options include a choice of ways to interpret the output structure and provide delimiters.

HGB

Posted 2010-04-13T19:17:39.483

Reputation: 1

0

For Windows users

  1. "Save as" Excel file as CSV
  2. Open saved file with Mircrosoft Works Spreadsheet
  3. "Save as" the spreadsheet as CSV
  4. All non-numeric field now have " around them

Note this is not the same keyboard quote which has a forward & backward variety.
So if using CSV to LOAD into Mysql table, cut and paste into ENCLOSED parameter otherwise you will wonder why you get message #1083 - Field separator argument is not what is expected

Greg

Posted 2010-04-13T19:17:39.483

Reputation: 1

3Mircrosoft Works <-? Are you sure about that? – nixda – 2013-10-08T17:39:03.250

0

Michael's answer of Aug 21 2014 is really helpful. However, I had to perform an additional step or two:

  1. Open the .csv file with Notepad (or equivalent)
  2. Replace all '' (repeated single quotes) with " (double quote)
  3. Replace all ; (used as delimiter in German version of Excel) with ,
  4. Save revised .csv file

user366932

Posted 2010-04-13T19:17:39.483

Reputation:

No explanation for the downbvote? Par for the course, but how are others expected to learn? *YOU* might think it obvious what is wrong, Mr. Downvoter, but it may not be obvious to everyone. We are trying to build a community here, and you are not helping. – Mawg says reinstate Monica – 2017-01-17T09:01:41.250

0

I used the approach below to take three columns in Excel and build the string in the fourth column.

=CHAR(34)&A2&CHAR(34)&","&CHAR(34)&B2&CHAR(34)&","&CHAR(34)&C2&CHAR(34)&""

My issue with the "''"@"''" approach is the second column of my data was a number the "''"@"''" approach did nothing with the numbers. Sometimes the second column is blank but I needed to make sure it was represented in the final text file.

user415149

Posted 2010-04-13T19:17:39.483

Reputation: 1

-1

I have run into this issue many times. Here is the simplest solution I have come up with.

  1. Save the file as Excel
  2. Import the Excel into an Access table
  3. Export the table from Access to a text file.

Access will allow you to specify exporting delimiter as a comma and qualifying text fields with quotes. In the export wizard, you can specify whatever delimiter or character around strings you want.

You may need to create an Access query to arrange the fields in a particular order or hide the auto-ID field added by Access.

Also... once exported to a CSV, do NOT open it in Excel again. If you want to look at the results, open it in notepad. Excel has a tendency to mess with the data of a csv.... I think it was fields padded with leading zeros if I remeber correctly.

Gunther

Posted 2010-04-13T19:17:39.483

Reputation: 11

This appears to duplicate the information in user326114's answer. – fixer1234 – 2016-04-06T19:08:11.073

-1

Here's how to use the OpenOffice app to take an Excel spreadsheet and create a text (csv) file with quotation marks around every text field.

Open the Excel file with OpenOffice, then follow these steps:

File > Save As

Provide a new name for the file you're about to create

For Filetype, choose "Test CSV (.csv)"

turn on checkbox "Edit Filter Settings"

click "Save"

choose "Keep current format"

Field delimiter should be a comma: ,

Text delimiter should a quotation mark: "

check the box "Quote all text cells"

click "OK"

This worked for me!

Mary H

Posted 2010-04-13T19:17:39.483

Reputation: 1

-1

This is my recipe. I hate having to do this but I had no better way. In my case, I'm not getting quotes around any field. I also needed to use UTF-8 encoding and ; instead of tabs, so this is what I ended doing.

NOTE: due to the ilegibility of putting double quotes enclosed by single quotes and so on, I've used purposely "keyboard formatting" to indicate both keystrokes and literal characters and strings.

  1. Insert a new column before any other in your Excel spreadsheet (click on the title of the 1st column, the entire column gets selected, right click, select "insert").
  2. Select the entire range of empty cells from the new column (they are selected by default). On the formula field, insert whatever you want: for instance, xxx. Press CTRL+enter to fill the entire column with the same value.
  3. Save the file as Unicode Text (*.txt).
  4. Open file in Notepad++.
  5. Press CTRL+f to open Search/Replace.
  6. Go to Replace tab.
  7. In "Search mode" select "Extended (\n, \r, \t, \0, \x...)".
  8. In the "Search" field, enter xxx plus a tab keystroke.
  9. In the "Replace" field, enter " (a double quote).
  10. Press Replace All.
  11. In the "Search" field, put a tab keystroke.
  12. In the "Replace" one, enter ";" (double quote, semicolon, double quote).
  13. Press Replace All.
  14. You are almost done. For the last double quote, enter \r in the "Search" field and "\r" (double quote, backslash, double quote) in the "Replace" one. Press Replace All.
  15. As long as you are not using chinese character, etc., you can change encoding to UTF-8 and save the file safely.

Pere

Posted 2010-04-13T19:17:39.483

Reputation: 134