Что нового

Excel в ListView

NOne

Новичок
Сообщения
9
Репутация
0
Приветствую.

Прошу помощи в такой задаче:

есть .xls-файлик с такой структурой:

Юзер1 | пароль1
Юзер2 | пароль2
Юзер3 | пароль3

нужно перенести его содержимое ListView (через GUICtrlCreateListViewItem с сепарацией на два столбца).

Заранее спасибо.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Можно вот так :
Код:
#include <GUIConstants.au3>
#include <Excel.au3>

$hMainGui=GUICreate('',240,170)

$ListView = GUICtrlCreateListView("Имя|Пароль", 10, 10, 220, 150)

GUISetState(@SW_SHOW,$hMainGui)

$PathFile = FileOpenDialog('Выбор файла EXCEL', @ScriptDir & '\', 'Файлы Excel (*.xls;*.xlsx)', 1)
	If Not @error Then
		$oExcel = _Excel_Open(False)
		$oWorkbook = _Excel_BookOpen($oExcel, $PathFile)
		$aResult = _Excel_RangeRead($oWorkbook, Default, Default, Default, True)
		_Excel_BookClose($oWorkbook)
		_Excel_Close($oExcel)

	For $i=0 To Ubound($aResult)-1
		GUICtrlCreateListViewItem ($aResult[$i][0]&'|'&$aResult[$i][1], $ListView )
	Next

	EndIf


While 1
$msg = GUIGetMsg()
	Select
	 		Case $msg= $GUI_EVENT_CLOSE
			Exit
	EndSelect
WEnd
 
Автор
N

NOne

Новичок
Сообщения
9
Репутация
0
да, работает, спасибо

правда, после загрузки в ListView ексель вылетает с ошибкой (2007 офис) - хоть с диалогом выбора файла, хоть на прямую
попробую переустановить или другую версию поставить... но это такое.

последнее уточнение, дабы считать тему закрытой: как мне делая дабл-клик по произвольной строке выдать MsgBox с паролем (т.е. с содержанием второй ячейки ряда)?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
как мне делая дабл-клик по произвольной строке выдать MsgBox с паролем
Так можно :
Код:
#include <GUIConstants.au3>
#include <Excel.au3>
#include <GuiListView.au3>
#include <GuiListView.au3>

$hMainGui = GUICreate('', 240, 170)

$ListView = GUICtrlCreateListView("Имя|Пароль", 10, 10, 220, 150)
$hListView = GUICtrlGetHandle($ListView)

GUISetState(@SW_SHOW, $hMainGui)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

$PathFile = FileOpenDialog('Выбор файла EXCEL', @ScriptDir & '\', 'Файлы Excel (*.xls;*.xlsx)', 1)
If Not @error Then
	$oExcel = _Excel_Open(False)
	$oWorkbook = _Excel_BookOpen($oExcel, $PathFile)
	$aResult = _Excel_RangeRead($oWorkbook, Default, Default, Default, True)
	_Excel_BookClose($oWorkbook)
	_Excel_Close($oExcel)

	For $i = 0 To UBound($aResult) - 1
		GUICtrlCreateListViewItem($aResult[$i][0] & '|' & $aResult[$i][1], $ListView)
	Next

EndIf


While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
	EndSelect
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
	#forceref $hWnd, $iMsg, $wParam
	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo

	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	$iCode = DllStructGetData($tNMHDR, "Code")

	Switch $hWndFrom
		Case $hListView
			Switch $iCode

				Case $NM_DBLCLK ; левый двойной клик мышкой по пункту
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
					$Index = DllStructGetData($tInfo, "Index")
					MsgBox(0, 'Пароль', _GUICtrlListView_GetItemText($ListView, $Index, 1))

			EndSwitch
	EndSwitch

	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
 
Автор
N

NOne

Новичок
Сообщения
9
Репутация
0
да, все работает, тема решена
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
NOne [?]

[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх