Export MySQL query to Excel file: Difference between revisions
Jump to navigation
Jump to search
m (→Methods) |
|||
| Line 1: | Line 1: | ||
Export MySQL query to Excel file (XLS or XLSX file) | Export MySQL query to Excel file (XLS or XLSX file) | ||
== | == Microsoft Excel (XLS or XLSX) file limits == | ||
<table border="1"> | <table border="1"> | ||
<tr> | <tr> | ||
| Line 34: | Line 20: | ||
</table> | </table> | ||
== Methods == | |||
=== One step conversion: ex MySQL query -> Excel file === | |||
Methods of exporting MySQL query -> XLS/XLSX file | |||
* [https://phpexcel.codeplex.com/ PHPExcel] | |||
* other MySQL client softwares e.g. [https://www.quest.com/products/toad-for-mysql/ Toad for MySQL], ''$'' [https://www.navicat.com/cht Navicat GUI] | |||
Notice the limit of Excel XLS file format: | |||
# "Total number of characters that a cell can contain: 32,767 characters" | |||
#* Using [http://www.w3resource.com/mysql/string-functions/mysql-substring-function.php MySQL SUBSTRING() function] ex: {{kbd | key = <nowiki>SUBSTRING(string_column, 1, 32767)</nowiki>}} for EXCEL 97<ref>[https://support.microsoft.com/en-us/kb/296053 Summary of capability limitations in Excel 97]</ref>-2007<ref>[https://support.office.com/en-us/article/Excel-specifications-and-limits-16c69c74-3d6a-4aaf-ba35-e6eb276e8eaa?CorrelationId=1de7e8d2-91e2-4eec-8868-4dc8cbd23463&ui=en-US&rs=en-US&ad=US Excel specifications and limits]</ref> (XLS 檔) | |||
#* validate the count of characters: MySQL {{kbd | key = <nowiki>CHAR_LENGTH</nowiki>}} or Excel {{kbd | key = <nowiki>LEN</nowiki>}} functions | |||
# "Length of formula contents: 8,192 characters" If the content start with the symbol {{kbd | key =<nowiki>=</nowiki>}} or {{kbd | key =<nowiki>-</nowiki>}}, Excel will consider the content is formula. | |||
#* Using CONCAT {{kbd | key =<nowiki>'</nowiki>}} symbol ex: {{kbd | key = <nowiki>CONCAT('\'', string_column)</nowiki>}} If the content is not formula. | |||
# "Worksheet size: 1,048,576 rows": | |||
#* Using {{kbd | key =LIMIT 1048576}} for EXCEL 2007 | |||
integrated solution for Excel limit 1 ~ limit 3 | integrated solution for Excel limit 1 ~ limit 3 | ||
Revision as of 03:20, 10 May 2017
Export MySQL query to Excel file (XLS or XLSX file)
Microsoft Excel (XLS or XLSX) file limits
| file format | data rows size | length of cloumn |
|---|---|---|
| XLSX file format[1] | Maximum of worksheet size is 1,048,576 rows by 16,384 columns. | (1) Length of formula contents: 8,192 characters (2) Total number of characters that a cell can contain: 32,767 characters[2] |
| XLS file format[3][4] | Maximum of worksheet size is 65,536 rows by 256 columns. First row is column name. |
Methods
One step conversion: ex MySQL query -> Excel file
Methods of exporting MySQL query -> XLS/XLSX file
- PHPExcel
- other MySQL client softwares e.g. Toad for MySQL, $ Navicat GUI
Notice the limit of Excel XLS file format:
- "Total number of characters that a cell can contain: 32,767 characters"
- Using MySQL SUBSTRING() function ex: SUBSTRING(string_column, 1, 32767) for EXCEL 97[5]-2007[6] (XLS 檔)
- validate the count of characters: MySQL CHAR_LENGTH or Excel LEN functions
- "Length of formula contents: 8,192 characters" If the content start with the symbol = or -, Excel will consider the content is formula.
- Using CONCAT ' symbol ex: CONCAT('\'', string_column) If the content is not formula.
- "Worksheet size: 1,048,576 rows":
- Using LIMIT 1048576 for EXCEL 2007
integrated solution for Excel limit 1 ~ limit 3
- SELECT SUBSTRING(IF(LEFT(string_column, 1) = '-' OR LEFT(string_column, 1) = '=', CONCAT('\'', string_column), string_column), 1, 32767) FROM <table> LIMIT 1048576
相關文章
Two steps conversion ex: MySQL query -> CSV file -> Excel file
Step 1: Export the MySQL query -> CSV file
- PHPExcel or MySQL client softwares
- MySQL :: MySQL 5.7 Reference Manual :: 8.4.3 Dumping Data in Delimited-Text Format with mysqldump
- Required FILE permission ex: GRANT FILE ON *.* TO 'user_name'@'localhost'; If you met the following error message:
mysqldump: Got error: 1045: Access denied for user 'user_name'@'localhost' (using password: YES) when executing 'SELECT INTO OUTFILE'
Condition 1: If the rows count of MySQL query is larger than 65,535 rows. You can use MS Excel.
- Cell contains return symbol should be replaced.
Condition 2: If the rows count of MySQL query is less than 65,535 rows. You can use LibreOffice Calc & MS Excel.
Step 2: Convert CSV to XLSX/XLS file format.
- MS Excel
- LibreOffice Calc (LibreOffice Portable)
Step 3: Data verification
- Verify the data rows count: Equal to the rows count of MySQL query. Not equal to 65,535 rows or less than the rows count of MySQL query.
- Verify the data column is in correct position
Because the CSV is not well-formatted, sometimes the data column after imported to Excel is in wrong position. If the data size is less than 65,535 rows, convert CSV to Excel/XLS by LibreOffice Calc is recommended.- If the data size is larger than 65,535 rows, Adjust the MySQL query to avoid the column value contains the
- enclosure character e.g. Tab key
- escape the enclosure character e.g. " become ""
- return symbol to separate different data row.
Technical issues: If it costs too much time to convert to Excel file
The important steps before generating CSV file. These steps reduce the problems when the CSV file was converted to Excel file.
- Add delimiter character between different column ex: comma symbol (,) or tab symbol
- Add enclosure character ex: double quote symbol (") or single quote symbol (')
- Add escape character escape the column value if contains the enclosure character
- Remove return symbol[7]:
SELECT REPLACE(REPLACE(REPLACE(`my_column`, '\r\n', ' '), '\n', ' '), '\r', ' ')
References
- ↑ Excel specifications and limits
- ↑ Err: 解決 Navicat 「存放裝置空間不足,無法完成此操作」問題訊息
- ↑ What is the maximum allowed rows in a Microsoft Excel .xls or .xlsx - Super User
- ↑ Worksheet compatibility issues - Excel
- ↑ Summary of capability limitations in Excel 97
- ↑ Excel specifications and limits
- ↑ trim - How to remove new line characters from data rows in mysql? - Stack Overflow