|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Добрый день, Пытаюсь создать програмку, которая вытаскивает схему таблиц из базы в csv (каждая таблица в отдельный файл) и потом собирает эти файлы в один .xlsx файл (каждый csv в отдельный sheet в экселе). Ниже код, который у меня получился. Тот модуль, который создает csv я написал сам (спасибо всем за помощь в соседнем топике), он работает замечательно. (Сильно не ругайте, ибо опыта программирования у меня почти нет). Модуль который собирает csv в один эксель файл я нашел в интернете и он работает только в идеальных условиях. Например, ему не нравится если в файлах присутствует шапка (выделено жирным), а также ругается на слова типа "System": dbo.assessment << Go to main list TABLE_SCHEMA , TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CONSTRAINT, Notes, Join Information dbo,assessment,id,1,,bigint,8,,, dbo,assessment,created_by,17,(' System '),varchar,80,,, dbo,assessment,created_date,18,(getdate()),datetime,,,, Вот некоторые ошибки: System.Data.OleDb.OleDbException (0x80040E14): Syntax error (missing operator) in query expression ''('System')''. System.Data.OleDb.OleDbException (0x80040E14): Invalid bracketing of name '[dbo.assessment]'. System.Data.OleDb.OleDbException (0x80004005): ' TABLE_NAME' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long. System.Data.OleDb.OleDbException (0x80004005): '' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long. Вот примеры файлов, который надо слить в один: https://1drv.ms/u/s!At756qpwT4ushdplPIsW3pot5AckbA?e=byMZgt Помогите пжлста подправить модуль, который сливает файлы в один, чтобы он работал со всеми данными. Спасибо. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2019, 03:33 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Roust_mSystem.Data.OleDb.OleDbException (0x80040E14): Syntax error (missing operator) in query expression ''('System')''. System.Data.OleDb.OleDbException (0x80040E14): Invalid bracketing of name '[dbo.assessment]'. System.Data.OleDb.OleDbException (0x80004005): ' TABLE_NAME' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long. System.Data.OleDb.OleDbException (0x80004005): '' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long.Вряд ли кто-то найдет желание заниматься вашим проектом в целом, это требует времени. Вычленяйте ошибки и разбирайтесь с каждой из них по отдельности. Тем более, все указанные ошибки - это ошибки в синтаксисе SQL, к примеру вместо [dbo.assessment] надо написать [dbo].[assessment] или просто dbo.assessment. Поэтому нужно просто брать результирующий запрос (собранную строку, которая пытается выполниться как SQL-команда), пытаться выполнить ее в sql-студии и, если студия выдала ту же ошибку, разбираться с синтаксисом, в частности, задать конкретный вопрос (здесь или даже в разделе mssql) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2019, 08:42 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Shocker.ProRoust_mSystem.Data.OleDb.OleDbException (0x80040E14): Syntax error (missing operator) in query expression ''('System')''. System.Data.OleDb.OleDbException (0x80040E14): Invalid bracketing of name '[dbo.assessment]'. System.Data.OleDb.OleDbException (0x80004005): ' TABLE_NAME' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long. System.Data.OleDb.OleDbException (0x80004005): '' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long.Вряд ли кто-то найдет желание заниматься вашим проектом в целом, это требует времени. Вычленяйте ошибки и разбирайтесь с каждой из них по отдельности. Тем более, все указанные ошибки - это ошибки в синтаксисе SQL, к примеру вместо [dbo.assessment] надо написать [dbo].[assessment] или просто dbo.assessment. Поэтому нужно просто брать результирующий запрос (собранную строку, которая пытается выполниться как SQL-команда), пытаться выполнить ее в sql-студии и, если студия выдала ту же ошибку, разбираться с синтаксисом, в частности, задать конкретный вопрос (здесь или даже в разделе mssql) Так я так и пишу: Код: c# 1. 2. 3.
В файле у меня: dbo.assessment << Go to main list TABLE_SCHEMA , TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CONSTRAINT, Notes, Join Information dbo,assessment,id,1,,bigint,8,,, dbo,assessment,created_by,17,(' System '),varchar,80,,, dbo,assessment,created_date,18,(getdate()),datetime,,,, Если в примере выше убрать строки с именем таблицы, текстом "<< Go to main list" и пустой строки после этого текста и убрать слово "System" из определния таблицы, то все работает: TABLE_SCHEMA , TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CONSTRAINT, Notes, Join Information dbo,assessment,id,1,,bigint,8,,, dbo,assessment,created_by,17,,varchar,80,,, dbo,assessment,created_date,18,(getdate()),datetime,,,, Вот команда, на которой это все валится: Insert into [dbo_assessment] ([dbo.assessment]) VALUES('<< Go to main list') Такая ошибка "Invalid bracketing of name '[dbo.assessment]'." Она думает, что имя таблицы в первой строке есть имя столбца: dbo.assessment А мне надо просто содержимое CSV вставить без всяких заголовков (имен столбцов). Также она ругается на слово "system" в определении таблицы. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2019, 09:47 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Roust_mInsert into [dbo_assessment] ( [dbo.assessment] ) VALUES('<< Go to main list') Такая ошибка "Invalid bracketing of name '[dbo.assessment]'." Она думает, что имя таблицы в первой строке есть имя столбца: dbo.assessmentТы же сам написал такое имя столбца, а не "она думает". Точка не допускается в имени столбца. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2019, 20:41 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Roust_m' TABLE_NAME' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long.тут он говорит, что в имени таблицы не может быть пробела ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2019, 20:58 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Roust_mМодуль который собирает csv в один эксель файл я нашел в интернете и он работает только в идеальных условиях.Roust_mему не нравится если в файлах присутствует...Что-то я не пойму, причем тут идеальные условия? Ты взял некий сторонний код, который читает файл в определенном формате, и решил, что он должен работать, если ты будешь писать в исходный файл всякую случайную фигню. Либо обеспечивай ему требования к формату, либо переделывай так, чтобы он понимал твои файлы в некоем другом формате ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2019, 21:29 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Roust_mна слова типа "System":он не ругается на слова System, они ему вообще пофиг. Он ругается, из-за того, что у тебя используется одиночный апостроф в значении. Апострофы нужно удваивать внутри текстового литерала, обрамленного апострофами - это синтаксис sql. Достаточно было бы Replace(val, "'", "''"), но автор скрипта не удосужился это сделать, как и попытки удалять лишние пробелы в названиях таблиц и полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2019, 21:36 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Shocker.ProRoust_mМодуль который собирает csv в один эксель файл я нашел в интернете и он работает только в идеальных условиях.Roust_mему не нравится если в файлах присутствует...Что-то я не пойму, причем тут идеальные условия? Ты взял некий сторонний код, который читает файл в определенном формате, и решил, что он должен работать, если ты будешь писать в исходный файл всякую случайную фигню. Либо обеспечивай ему требования к формату, либо переделывай так, чтобы он понимал твои файлы в некоем другом формате А как сделать так, чтобы он импортировал данные без имен столбцов, просто как данные, при этом, чтобы число столбцов в разных строках могло быть разным? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2019, 02:46 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Можно как-нибудь просто скопировать диапазон, скажем A1:Z100? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2019, 03:47 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Что-то тут совсем всё печально. Во-первых, есть системные представления information_schema.columns и information_schema.tables , которые предоставляют всю нужную информацию без конструирования сложносочиненных запросов, да к тому же с использованием устаревших представлений ( sysobjects итп). Во-вторых, наиболее оптимально эту задачу решать генерацией файла в формате Excel XML Spreadsheet - на вход xml-данные, сформированные запросом, и преобразование данных с помощью XSLT - на выходе сразу получаем файл нужной структуры, который только останется красиво отформатировать, и сохранить в .xslx. Запрос для предоставления xml-данных: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
XSLT-преобразование: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Использование: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Нюансы: 1. У экселя, в т.ч. и у последних версий, есть ограничение на длину имени листа - 31 символ, поэтому в xsl-шаблоне при формировании имени листа используется substring. 2. В вышеприведенном коде ображение и к запросу, и к шаблону делается как к ресурсам. За вхардкоденные запросы кое-где можно схлопотать (да и с ними просто тупо неудобно работать). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2019, 08:21 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Roust_mА как сделать так, чтобы он импортировал данные без имен столбцов, просто как данные, при этом, чтобы число столбцов в разных строках могло быть разным?А что тогда мешает открыть этот файл в экселе как csv без всяких там скриптов, это же штатная возможность экселя ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2019, 09:02 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Не совсем понял как это работает. Если мы запросом создаем xml файл, то зачем нам подключаться к базе? using(var cnn = new SqlConnection("Data Source=.;Initial Catalog=AdventureWorks2017;Integrated Security=SSPI")) Также не совсем понял, куда эта программа пишет? А также куда присобачить XSLT-преобразование? Я так понимаю что программа берет файл сгенерированный запросом: "D:\Trash\tables.xml" А результат куда отправляется? Пытался скопилировать, ругается на эти строки: Код: c# 1. 2. 3.
The name 'Properties' does not exist in the current context ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 09:39 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Shocker.ProRoust_mА как сделать так, чтобы он импортировал данные без имен столбцов, просто как данные, при этом, чтобы число столбцов в разных строках могло быть разным?А что тогда мешает открыть этот файл в экселе как csv без всяких там скриптов, это же штатная возможность экселя Я попробовал такой подход, в котором открываю каждый из csv файлов и тупо копирую диапазон A1:J60. Почему-то ругается на то, что диапазоны источника и цели разные, хотя оба определены как A1:J60. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 09:44 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Roust_mЕсли мы запросом создаем xml файл Запросом мы получаем данные от сервера в виде xml. Roust_mТакже не совсем понял, куда эта программа пишет? В файл D:\Trash\tables.xml Roust_mА также куда присобачить XSLT-преобразование? Оно туда уже присобачено. Roust_mА результат куда отправляется? В файл D:\Trash\tables.xml Roust_mПытался скопилировать, ругается на эти строки: Комментарий №2 в моем предыдущем постинге. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 09:48 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Разобрался, шикарное решение, спасибо большое! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 10:05 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Такой еще вопрос, а что нужно сделать, чтобы на каждом листе помимо информации о структуре таблицы была шапка в виде схемы и имени таблицы и текста "<< Go to main list" за которым пустая строка и затем уже данные из запроса: dbo.assessment << Go to main list TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT DATA_TYPE CHARACTER_MAXIMUM_LENGTH CONSTRAINT Notes Join Information dbo assessment id 1 bigint 8 ... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 10:31 |
|
Слить много файлов в формате .csv в один Эксель файл
|
|||
---|---|---|---|
#18+
Roust_m, в xslt-шаблон сразу после открывающего тэга ss:Table вставить Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 10:52 |
|
|
start [/forum/topic.php?fid=20&msg=39841790&tid=1398862]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 271ms |
0 / 0 |