90

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

17 Answers 17

44

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.

  • 7
    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 '16 at 8:40
  • 21
    Not an answer at all. The question is explicitly about MS Excel – vladkras Jul 5 '16 at 10:26
43

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

  • 10
    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
  • 9
    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
  • Office 2010, still overflows on high number of selected rows, just as @sahmeepee mentioned. – access_granted Aug 9 '17 at 1:00
18

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.

  • 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 '16 at 22:28
  • 6
    The format should have been \”@\” – manat Nov 19 '16 at 15:31
  • 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 Mar 9 '17 at 23:56
  • @manat's answer, but without the curly quotes: \"@\" – MSC Feb 7 at 0:59
13

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.

  • For 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 Nov 1 '18 at 23:45
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.

  • The only drawback would be if the field itself contains a double-quote. – access_granted Aug 9 '17 at 3:01
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.

  • 1
    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
3

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/

  • 1
    This work well for alpha - you will need \”#\” for columns with numeric values. – DropHit Sep 25 '17 at 2:07
  • 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 Dec 8 '17 at 15:51
  • Have not tried it.. but if you are creating a csv couldn't you just change the columns to text and use \"@\" – Steve Coleman Sep 26 at 18:00
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
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.

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

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.

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.

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.

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
  • 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 Jan 17 '17 at 9:01
-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.
-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.

  • This appears to duplicate the information in user326114's answer. – fixer1234 Apr 6 '16 at 19:08
-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!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.