Skip to content

The Dummy Programmer

Stories of daily programming

  • Home
  • My other dummy projects
  • Games
    • Space Y: An Asteroids clone
  • Services
    • What’s my user agent
    • What’s my IP address
  • About
  • Toggle search form

NPOI and Excel found unreadable content in ‘[filename].xls’

Posted on July 12, 2018September 9, 2018 By

In one of my ASP.NET applications, I was developing a page to extract some data to an xlsx file, and for this purpose I was using the library NPOI. Using Excel to open the xlsx file created by the application, I obtained different results depending on the server where the application was deployed: using some servers I could open the xlsx file without problems, while using other servers I got the following error:

Excel found unreadable content in ‘[filename].xlsx’. Do you want to recover the contents of this workbook?

After having struggled a lot I finally decided to unzip the xlsx file and make a file comparison between a working file and a “damaged” file.

I have found a difference in the file “docProps\core.xml”, tag “<dcterms:created xsi:type=”dcterms:W3CDTF”>”.

Here is an extract of the “damaged” file:

<dcterms:created xsi:type="dcterms:W3CDTF">2018-07-05T23.39.32Z</dcterms:created>

And here the same tag but as it appears in the working file:

<dcterms:created xsi:type="dcterms:W3CDTF">2018-07-05T23:39:32Z</dcterms:created>

As you can see, time separator character is different. So I modified the time separator in the “damaged” file and zipped the data to get an xlsx file again. Now Excel was able to open that file, without showing any error!

To finally solve the problem, I did a simple thing…. in each ASP.NET page that uses NPOI to generate an xlsx file I added this code in the OnInit event:

CultureInfo newCulture = (CultureInfo) System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
newCulture.DateTimeFormat.TimeSeparator = ":";
System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;

Note that in order to make work the code above, you have to import the namespace System.Globalization.

Have a nice day!

 

ASP.NET, NPOI

Post navigation

Previous Post: Zipping xlsx file correctly
Next Post: Error message: User account restriction error

Related Posts

Failed to decode downloaded font: (your web application address) ASP.NET
System.Net.Sockets.SocketException (0x80004005): No such host is known ASP.NET
HTTP 500 – Internal server error in an ASP.NET application ASP.NET
Telerik RadGrid rendering problems with IE11 in compatibility mode ASP.NET
Configure access permission to a folder for an IIS Application pool ASP.NET
WebResource.axd (404) not found ASP.NET

Search

Related posts

  • Searching files and file content in Windows
  • Dump the content of an array / hash in Perl
  • WebResource.axd (404) not found
  • Dell Inspiron 15 7000 - No Networks Found

Categories

  • .NET 6 (1)
  • .NET 7 (1)
  • AJAX (1)
  • Android (2)
  • Apache (4)
  • ASP.NET (9)
  • ASP.NET MVC (3)
  • Avalonia UI (1)
  • BCP (1)
  • Bitlocker (2)
  • C# (14)
  • CentOS (4)
  • ClosedXML (1)
  • CLR (1)
  • DNS (1)
  • Encryption (3)
  • Excel (2)
  • FuelPHP (3)
  • Games (2)
  • Google Chrome (1)
  • GSuite (1)
  • HTML (1)
  • Imagick (2)
  • Javascript (1)
  • Kindle (1)
  • LAMP (3)
  • Linux (7)
  • MariaDB (2)
  • Mathematics (2)
  • MySql (4)
  • NPOI (1)
  • Office 365 (1)
  • Perl (1)
  • PHP (6)
  • Programming (1)
  • Remote desktop (1)
  • SFTP (2)
  • Sockets (3)
  • Sql Server (20)
  • Sql Server 2016 (14)
  • Sql Server 2019 (1)
  • SSL (4)
  • Task scheduler (1)
  • Telerik ASP.NET AJAX (2)
  • The Dummy Programmer Chat (2)
  • Threading (5)
  • Tools (1)
  • TPL (3)
  • TypeScript (3)
  • Ubuntu (4)
  • Virtualization software (3)
  • Visual Studio (1)
  • Visual Studio Code (2)
  • VueJS (1)
  • Web fonts (1)
  • Web programming (6)
  • Windows (12)
  • Windows 10 (15)
  • Windows Forms (1)
  • Windows Server (6)

Copyright © 2024 The Dummy Programmer | Privacy Policy | Terms of use |

Powered by PressBook Masonry Dark

Manage Cookie Consent
This site doesn’t collect user personal data and doesn’t install profiling or analytical cookies, either its own or from third parties. Read our privacy policy for more info.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
View preferences
{title} {title} {title}