Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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

share|improve this question

14 Answers 14

up vote 8 down vote accepted

Seems that even now, Excel has problems saving a proper CSV file. An old ExcelForum.com post lists a number of macros that do the trick.

share|improve this answer
    
The link has a database problem – Mike Feb 17 at 16:03
    
Seemed to only be temporary. It's working now. – technomalogical Mar 21 at 0:55

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

share|improve this answer
7  
Something 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 May 21 '13 at 18:06
    
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 Oct 13 '13 at 13:57
5  
I took the liberty to create a gist with this macro, and a couple of fixes: gist.github.com/fabriceleal/7803969 – fableal Dec 5 '13 at 11:43
    
@fableal Great snippet! It deserves to be in an answer. – xiankai Dec 18 '13 at 1:35

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

share|improve this answer
4  
Although not an answer to the specific question it is a simpler workaround than trying to get my clients to use a macro! – Duncanmoo Nov 1 '13 at 8:35
    
I'm tired of using this method every day, that's why I'm here – vladkras Mar 7 '14 at 6:33
    
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 Apr 16 '15 at 3:12
    
best answer ever!! – rajya vardhan Jan 22 at 8:40
    
Not an answer at all. The question is explicitly about MS Excel – vladkras Jul 5 at 10:26

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.

share|improve this answer
    
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 Mar 18 at 22:28

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.

share|improve this answer

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.

share|improve this answer
    
If 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 Mar 27 '15 at 19:56

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

share|improve this answer
3  
Mircrosoft Works <-? Are you sure about that? – nixda Oct 8 '13 at 17:39

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
share|improve this answer

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.

share|improve this answer

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.

share|improve this answer

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.

share|improve this answer

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.

share|improve this answer

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.
share|improve this answer

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.

share|improve this answer
    
This appears to duplicate the information in user326114's answer. – fixer1234 Apr 6 at 19:08

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .