Super User Asked on November 22, 2021
I’ve been searching around for a while trying to figure out how to output a CSV file in such a way to force Excel to interpret the values as a string and not try to convert them to numbers or dates.
e.g.:
"141", "10/11/2002", "350.00", "1311742251"
Excel tries to “intelligently” convert all these to its native date/number formats. Is there a way around that?
EDIT: Clarified the intent of my question, sorry for confusion.
I had issues with Simon's answer if the text in question was too long (due, I think, to a bug in Excel: https://superuser.com/a/776614/1084793). Shane's answer didn't work for me if there was a comma in the string.
I also had issues using the =
if the test contains a newline character.
In either instance (if it's long, or has a newline), I'm hoping that Excel will correctly interpret it anyway.
So currently, this is the C# code I'm using:
private string content;
public String Content
{
get
{
// escape double-quotes first, to get the right length of the output
string output = content.Replace(""", """""");
if (output.Length > 255 || content.Contains("n"))
{
// just output with double-quotes ("hello")
return """ + content.Replace(""", """") + """;
}
else
{
// output with the equals ("=""hello""")
return ""=""" +
output +
""""";
}
}
set
{
content = value;
}
}
That is so far working for all my scenarios. If anyone has a way around the newline or 255 character issue that still uses the "=" method, I'd be very interested.
Answered by richjhart on November 22, 2021
Like many, I have been struggling with the same decisions that Microsoft makes and tried various suggested solutions.
For Excel 2007 the following goes:
However:
Putting a tab before all values before putting double quotes around them DOES prevent conversions to dates AND DOES prevent trimming of leading or trailing zeroes and the sheet does not even show nasty warning markers in the upper left corner of each cell.
E.g.:
"<tab character><some value>","<tab character><some other value>"
Note that the tab character has to be within the double quotes. Edit: it turns out that the double quotes are not even necessary.
Double clicking the csv file can open the file as a spreadsheet in Excel showing all values that are treated as just above, like text data. Make sure to set Excel to use the '.' as the decimal point and not the ',' or every line of the csv file will end up as one text in the first cell of each row. Apparently Microsoft thinks that CSV means "Not the decimal point" Separated Value.
Answered by ajabo on November 22, 2021
A simple way to force Excel to interpret the date as text is to put a single quote in front of the date, instead of using full quotes, as in:
'10/11/2002
If you can import the CSV instead of opening it, you can tell Excel what format each column should be. Have a look at this question I asked.
Answered by hdhondt on November 22, 2021
The example from Simon did not work for me, and I suspect it is a language difference. In C# here is what my working format string looks like:
var linebreak = (i++ == list.Count) ? "" : "rn";
csv += String.Format("="{0}",{1},{2},{3},="{4}"{5}",
item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);
and this is what the output file looks like:
="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""
As can be seen, the format in the output file is ="VALUE",
not "=""VALUE""",
which I believe may be a Visual Basic convention.
I am using Excel 2010. Incidentally, Google Sheets will not open/convert a file formatted this way. It will work if you remove the equal sign thus "VALUE",
- Excel will still open the file but ignore the fact that you want your columns to be strings.
Answered by Shane K on November 22, 2021
Using Excel's import functionality allows you to specify the format (auto, text or date) each column should be interpreted as and does not require any modification to the data files.
You can find it as Data
→ Get External Data
→ From Text
in Excel 2007/2010.
Or Data
→ Import External Data
→ Import Data
in Excel 2003.
Here's an image of the Excel 2003 Text Import Wizard in action on the example data given, showing me importing the latter two columns as text:
Answered by DMA57361 on November 22, 2021
For those that have control over the source data, apparently Excel will auto-detect the format of a CSV field unless the CSV column is in this format:
"=""Data Here"""
eg...
20, 5.5%, "0404 123 351", "3-6", "=""123"""
[number] [percent] [number] [date] [string] <-- how Excel interprets
It also works in Google Spreadsheet, but not sure if other spreadsheet apps support this notation.
If you suspect any the data may contain quotes itself, you need to double-escape them, like this...
"=""She said """"Hello"""" to him"""
(EDIT: Updated with corrections, thanks DMA57361!)
Answered by Simon East on November 22, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP