Страница: 1 | 2 |
Вопрос: Текст в массив или в Excel
Добавлено: 03.03.10 09:37
Автор вопроса: Michael Melchakov | ICQ: 302272185
Подскажите как сделать следующее:
Есть текстовый файл, с содержимым примерно такого плана (количество строк - очень много):
-26,34674644
-25,51070404
-24,77244759
-24,03800392
-23,29808235
-22,64535332
-21,92366028
-21,23150635
-20,61622238
-19,97153473
-19,3574276
Этот текст, необходимо закинуть в массив Visual Basic.NET или в столбец (например "А") Excel-а. Само собой в числовом варианте.
Примеров вроде как и нашел не мало, но все не получается. Подскажите пожалуйста, очень надо :'(
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
Ishayahu
ICQ: 329944992
Вопросов: 4
Ответов: 21
Web-сайт:
Профиль | | #1
Добавлено: 03.03.10 09:49
так все просто
считаешь кол-во строк
переопределяешь массив на нужный размер
считываешь построчно в массив
Номер ответа: 2
Автор ответа:
Ishayahu
ICQ: 329944992
Вопросов: 4
Ответов: 21
Web-сайт:
Профиль | | #2
Добавлено: 03.03.10 09:55
пришли пример своего кода, может я пойму, в чем ошибка
Номер ответа: 3
Автор ответа:
UnDeAdZak
Вопросов: 80
Ответов: 476
Профиль | | #3
Добавлено: 03.03.10 10:10
Номер ответа: 4
Автор ответа:
UnDeAdZak
Вопросов: 80
Ответов: 476
Профиль | | #4
Добавлено: 03.03.10 10:11
тока яс Do while не уверен что правильно написал, может быть там b надо на trye поставить
Номер ответа: 5
Автор ответа:
Michael Melchakov
ICQ: 302272185
Вопросов: 12
Ответов: 31
Профиль | | #5
Добавлено: 03.03.10 10:36
Сейчас нахожусь на следующей стадии:
Дальше, думаю сделать таким образом: каждое значение массива перевести в число - таким образом Val(Replace(lineArray(X), ",", ".")
Уперся, опять на определении размерности массива (или на количестве строк текстового файла - количество строк - лучше).
Номер ответа: 6
Автор ответа:
Michael Melchakov
ICQ: 302272185
Вопросов: 12
Ответов: 31
Профиль | | #6
Добавлено: 03.03.10 10:38
ответ от UnDeAdZak - чуть погодя попробую все равно спасибо
Номер ответа: 7
Автор ответа:
Ishayahu
ICQ: 329944992
Вопросов: 4
Ответов: 21
Web-сайт:
Профиль | | #7
Добавлено: 03.03.10 10:42
зачем так? можно же проще:
' файл надо еще вроде открыть?
Dim b As Boolean = False
Dim mass() As String
Dim i As Integer = 0
Do Until SR.EndOfStream
i += 1
Loop
ReDim mass(i)
' сюда надо вставить переход на начало файла. например закрыть его и открыть еще раз. не помню точно как делать
Do Until SR.EndOfStream
mass(i) = SR.ReadLine
Loop
Номер ответа: 8
Автор ответа:
Fatty
Вопросов: 0
Ответов: 55
Профиль | | #8
Добавлено: 03.03.10 12:27
Спробуй так проверил на Excel 2003(рус)/ 2007(eng)
Imports System.IO
Imports System.Runtime.InteropServices
Imports System.Globalization
Imports System.Threading
Imports Microsoft.Office.Interop.Excel
Imports Excel = Microsoft.Office.Interop.Excel
'' Require: References -> COM -> Microsoft.Excel XX.0 Object Library
_____________________________________________________
Public Sub TryIt()
Dim oldCult = CultureInfo.CurrentCulture()
'' This line is very important!
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU" '<-- change culture on whatever you need
Dim miss As Object = System.Reflection.Missing.Value
Dim i As Integer
Dim textfile As String = "C:\numbers.txt"
'' Open Excel
Dim m_objExcel As Excel.Application = New Excel.Application
m_objExcel.Visible = True
m_objExcel.UserControl = True
Dim m_objBooks As Excel.Workbooks = CType(m_objExcel.Workbooks, Excel.Workbooks)
Dim m_objBook As Excel.Workbook = Nothing
Try
'' Open workbook
m_objBooks.Open("C:\numbers.xls", False, False, miss, "", False, miss, Excel.XlPlatform.xlWindows, miss, True, miss, miss, miss, False)
m_objBook = m_objExcel.ActiveWorkbook
m_objBook.Activate() 'optional
Dim m_objSheets As Sheets = m_objBook.Sheets
Dim m_objSheet As Worksheet = m_objSheets.Item(1) '<--"Лист1"
'm_objSheet.Cells.ClearContents() 'optional may to remove this line
Dim m_objCells As Range = m_objSheet.Cells
If IO.File.Exists(textfile) Then
'Create a StreamReader and open our text file
Using pars As New StreamReader(textfile)
i = 1
'Now add our columns (we will check to make sure the column doesnt exist before adding it)
While Not pars.EndOfStream
Dim line As String = pars.ReadLine
'' write data starting from cell "A1"
Dim m_objRange As Range = Nothing
m_objRange = m_objSheet.Range(m_objCells(i, 1), m_objCells(i, 1))
m_objRange.NumberFormat = "@"
m_objRange.Value2 = line
i += 1
End While
End Using
End If
'' Save the file in the typical workbook format
m_objBook.SaveAs("C:\numbers.xls", Excel.XlFileFormat.xlWorkbookNormal, "", "", False, False, XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss)
Catch ex As System.Exception
MessageBox.Show(ex.StackTrace)
Finally
'' close workbook and quit Excel
If Not m_objBook Is Nothing Then
m_objBook.Close(False, miss, miss)
m_objBook = Nothing
End If
m_objExcel.Quit()
'' release process if it's still active
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(m_objExcel)
Thread.CurrentThread.CurrentCulture = oldCult
End Try
End Sub
~'J'~
Номер ответа: 9
Автор ответа:
UnDeAdZak
Вопросов: 80
Ответов: 476
Профиль | | #9
Добавлено: 03.03.10 12:45
Ishayahu у меня правелнее, ты сначала вычесляеш количество строк, после череходиш в начало файла и считываеш все строки, а я считываю строку ,и сразу-же проверяю кончился файл или нет.Хотя,в твоём варианте учитывается количество элементов массива(
Номер ответа: 10
Автор ответа:
Michael Melchakov
ICQ: 302272185
Вопросов: 12
Ответов: 31
Профиль | | #10
Добавлено: 03.03.10 15:45
Спасибо всем за подсказки, решение нашел следующим образом:
Если кому надо, то могу просто написать как это закинуть в эксель?
Номер ответа: 11
Автор ответа:
Ishayahu
ICQ: 329944992
Вопросов: 4
Ответов: 21
Web-сайт:
Профиль | | #11
Добавлено: 03.03.10 17:02
вот-вот. условия то задачи были "очень большой файл". да и вообще лучше писать как можно более универсальные проги
Номер ответа: 12
Автор ответа:
Ishayahu
ICQ: 329944992
Вопросов: 4
Ответов: 21
Web-сайт:
Профиль | | #12
Добавлено: 03.03.10 17:03
давай
Номер ответа: 13
Автор ответа:
Michael Melchakov
ICQ: 302272185
Вопросов: 12
Ответов: 31
Профиль | | #13
Добавлено: 03.03.10 20:02
Добавление в эксель:
Здесь zu - количество строк. DataArray - массив (почему то пришлось делать) минимум двумерный.
Если кто будет пробовать не получится, доделаю свое дело, напишу полный пример...
Номер ответа: 14
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #14
Добавлено: 04.03.10 05:01
1) Если у тебя разделитель целой и дробной части символ ",", то не нужно делать замену на точку, достаточно при приведении к типу Double указать русскую локаль.
2) Если файл большой, читать лучше всего в потоковом режиме через StreamReader, как было показано выше
3) Для хранения данных использовать не массив, а List в нем не нужно заранее указывать кол-во данных, можно добавлять по необходимости сколько нужно.
Номер ответа: 15
Автор ответа:
Michael Melchakov
ICQ: 302272185
Вопросов: 12
Ответов: 31
Профиль | | #15
Добавлено: 04.03.10 09:44
Насчет первого и второго пункта спасибо (хотя второй пункт у меня размер файла - относительно большой - около метра - пока работает в милисекунды).
Пункт третий - мне все равно необходимо знать количество данных, для последующей обработки, так что тут безразницы...