Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#5671
Cita de: guillehampp en 10 Febrero 2015, 17:25 PM
"No se puede tener acceso al archivo"

Código (vb,8) [Seleccionar]
Const xlNormal = -4143
filename = objFile.GetFileName(oFile)
IF objFile.FileExists(deletefile) Then
objFile.DeleteFile(deletefile)
objRawData.SaveAS "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
ELSE
objRawData.SaveAs  "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
objRawData.Close SaveChanges=True

END IF


VBS, a diferencia de VBA, no soporta parámetros nombrados (named parameters) y seguramente sea esa la instrucción que te está lanzando un error, no al método SaveAs como piensas, ya que según la documentación oficial de Microsoft, y aunque no puedo evaluar la sintaxis porque desconozco que valor le das a la variable "filename" o si el directorio que utilizas existe, estás utilizando la parametización correcta para el método SaveAs:
Fuente: Workbook.SaveAs Method (Excel)

Como ya he explicado, no te va a funcionar tal y como lo estás escribiendo, ya que VBS no soporta esa sintaxis,
Si quieres guardar los cambios en el archivo al liberar el objeto, en VBS, simplemente omite el nombre del parámetro al llamar al método close:
objRawData.Close True

El resto del script parece estar bien a simple vista, aunque como ya he comentado hay ciertos detalles que no puedo evaluar sin conocer la información necesaria.

Aparte del error de sintaxis que estás cometiendo, quizás tambien te pudiera dar problemas la enumeración del formato especifico de archivo que estás utilizando (-4143=xlWorkbookNormal), si sigues teniendo problemas despues de la corrección que he mencionado, prueba a utilizar el valor 51 de la enumeración (xlWorkbookDefault).
Fuente: XlFileFormat Enumeration (Excel)

Saludos
#5672
@crisoof

El tiempo de vida de una variable, es el mismo tiempo de vida de la instancia que invocó el Batch-Script donde inicializaste la variable.

Ejemplo:

1.bat
Código (dos) [Seleccionar]
@Echo OFF

Set "Var=Hello World"
Call ".\2.bat"

Pause&Exit


2.bat
Código (dos) [Seleccionar]
@Echo OFF
Echo Var=%VAR%
Exit /B 0


Saludos
#5674
Cita de: Nac-ho en  9 Febrero 2015, 08:01 AMRe: Les gusta este header?

me gustaría saber su opinión, y quizás ofecerlo de "tributo" al foro.  :xD

(aunque no se si pegue mucho, ya que el foro como tal es bien retro o eso me da a entender a mi)


Has pedido la opinión general, luego no te arrepientas si no te gusta mi crítica constructiva :P

Entiendo que para gustos los colores, habrá a quien le gusta y a quien no, y sin animo de menospreciar tu trabajo de diseño (que eso es lo primero por encima de todo), a mi no me gusta en absoluto, el fondo de la imagen con esa textura de cuadrados monócromos me recuerda a los azulejos del suelo de un baño, se me hace incómodo de ver.

Las "ondas" blancas (por llamarlo así), están demasiado forzadas, con mucha aleatoriedad (movimientos bruscos al "pintar" sin seguir un patrón), y son demasiado lumínicas,
puesto que has preferido utilizar el mismo color (blanco) tanto para las "ondas" lumínicas como para el fondo con cuadrados blancos, por ende has tenido que modificar la saturación/HUE de la textura del fondo para el contraste (o quizás lo hayas hecho para ajustarlo a la gama de de colores del logo azúl), dando así un tono azulado que no es nada bello, y un efecto de ondas lumínicas que no se sintetiza con el patrón de la textura, vamos, que en mi opinión, no pega ni con cola ninguno de los elementos de esa imagen, esas "ondas" lumínicas parecen garabatos que no deberían estar ahí (...y se vería mejor); sobre la textura de los cuadrados monócromos, ya he dado mi opinión.

Estoy seguro de que puedes hacer algo mejor, ánimo.

Saludos!
#5675
Si no he entendido mal, tienes un DataGridView con modo de selección por celda (no por fila), utilizas una columna para mostrar la ruta de una imagen?, y quieres que al seleccionar una celda (haciendo doble-click) se abra la imagen de la columna asociada a esa fila, entonces:

Suscríbete al evento CellDubleclick y utiliza la información del evento (event-data) para localizar la columna y por ende la ruta de la imagen.


Seguramente no tengas el grid estructurado de esta manera, pero es solo un ejemplo:

VB.Net
Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Form1_Load() Handles MyBase.Load

       With Me.DataGridView1
           .SelectionMode = DataGridViewSelectionMode.CellSelect
           .MultiSelect = False
           .Columns.Add("colImage", "Columna de Imagen")
           .Columns.Add("colInfo1", "Columna adicional 1")
           .Columns.Add("colInfo2", "Columna adicional 2")
           .Rows.Add({"C:\Imagen.jpg", "Info adicional 1", "Info adicional 2"})
       End With

   End Sub

   Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) _
   Handles DataGridView1.CellDoubleClick

       Dim value As String = DirectCast(sender, DataGridView).Rows(e.RowIndex).Cells(0).Value.ToString

       If Not String.IsNullOrEmpty(value) AndAlso IO.File.Exists(value) Then
           Try
               Process.Start(value)

           Catch ex As Exception
               Throw

           End Try
       Else
           ' ...

       End If

   End Sub

End Class


C#
Código (csharp) [Seleccionar]

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class Form1
{

private void Form1_Load()
{
var _with1 = this.DataGridView1;
_with1.SelectionMode = DataGridViewSelectionMode.CellSelect;
_with1.MultiSelect = false;
_with1.Columns.Add("colImage", "Columna de Imagen");
_with1.Columns.Add("colInfo1", "Columna adicional 1");
_with1.Columns.Add("colInfo2", "Columna adicional 2");
_with1.Rows.Add({
"C:\\Imagen.jpg",
"Info adicional 1",
"Info adicional 2"
});
}

private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
string value = ((DataGridView)sender).Rows(e.RowIndex).Cells(0).Value.ToString;

if (!string.IsNullOrEmpty(value) && IO.File.Exists(value)) {
try {
Process.Start(value);
} catch (Exception ex) {
throw;
}
} else {
// ...
}
}

public Form1()
{
Load += Form1_Load;
}

}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================
#5676
Esta es la excepción que obtienes:
0x0000008E (0xC0000005 , 0x83085424 , 0xADE8BAC , 0x00000000)

El código principal de la excepción indica que se trata de un error del kernel:
0x0000008E: KERNEL_MODE_EXCEPTION_NOT_HANDLED

Según Microsoft, en un principio la excepción puede deberse a varios motivos:
  • Daños en el disco duro.
  • Problemas de configuración de hardware general con el BIOS, la memoria, el disco duro, o con otros dispositivos.
  • Controlador de dispositivo incompatible.
  • Software incompatible.
  • Service Packs.

El primer parámetro de la excepción indica el motivo exacto del mismo, que en este caso es debido a un fallo de lectura/escritura en la memoria como ha comentado @Simorg (pero por este código de error, no por el anterior):
0xC0000005: STATUS_ACCESS_VIOLATION, indicates that a memory access violation occurred.

El siguiente parámetro, es la dirección exacta de memoria que ha causado la violación, la dirección identifica el driver o la función del sistema que ha provocado la excepción:
0x83085424

El siguiente parámetro, no tiene mucha relevancia aunque podría contener información adicional, es el trap frame del handler que invocó la excepción:
0xADE8BAC

Y el último parámetro, está reservado por el sistema, es irrelevante:
0x00000000: STATUS_SUCCESS, The operation completed successfully.

Posiblemente hallarás más información que te pueda ayudar a resolver el problema, visualizando más posibles detalles del mismo en el Visor de Eventos de Windows (Windows Event Viewer), que está ubicado en el directorio:
C:\Windows\System32\eventvwr.msc





Causa



El tipo de error KERNEL_MODE_EXCEPTION_NOT_HANDLED es un error muy común, para interpretarlo correctamento, primero se debe identificar la excepción que se generó.

Códigos de error comunes incluyen los siguientes:

  • 0x80000002: STATUS_DATATYPE_MISALIGNMENT, indica que se ha encontrado una referencia de datos desalineados.
  • 0x80000003: STATUS_BREAKPOINT, indica que un 'breakpoint' o 'ASSERT' fue encontrado cuando el sistema no tenia adjuntado el depurador del Kernel.
  • 0xC0000005: STATUS_ACCESS_VIOLATION, indica que ha ocurrido una violación de acceso a la memoria.

Para una lista complteta de códigos de error, visualice el archivo "Ntstatus.h" del código fuente, que está ubicado en un directorio incluido en el 'Microsoft Windows Driver Kit (WDK)'


Resolución



Si no estás equipado para depurar este problema, debes usar técnicas básicas de resolución de problemas:


  • Asegúrate de tener espacio suficiente en el disco.
  • Si un driver ha sido identificado en el mensaje del error, deshabilita el driver o consulte con el fabricante para actualizaciones del driver.
  • Prueba a cambiar los adaptadores de video.
  • Consulte con el vendedor del hardware para actualizaciones de la BIOS.
  • Desactive las opcioens de memoria de la BIOS, como el 'caching', o el 'shadowing'.

Si no conoces el motivo específico que ha causado la excepción, considera lo siguiente:


  • Incompatibilidad de Hardware.
    Asegúrate de que cualquier dispositivo nuevo de hardware que haya sido instalado recientemente, sea compatible con la versión instalada de Windows.
    Por ejemplo, puedes obtener información sobre compatibilidad con Widnows 7 en el centro de compatibilidad de Windows 7 (Windows 7 Compatibility Center).

  • Driver o servicio del sistema defectuoso.
    Un driver o servicio del sistema defectuosos pueden ser responsables de este error.
    Los problemas de hardware, tales como incompatibilidades con la BIOS, conflictos de memoria, y los conflictos de IRQ, también pueden generar este error.




Traducción parcial del soporte de Microsoft al Castellano, por: Eleкtro.

Fuente(s):
Bug Check Code Reference
Bug Check 0x8E: KERNEL_MODE_EXCEPTION_NOT_HANDLED
NTSTATUS.h values
#5677
La aplicación ZoomIt, al igual que todas las demás aplicaciones de SysInternals, guardan la configuración de usuario en el registro de Windows, especificamente en la siguiente clave:
HKEY_CURRENT_USER\Software\Sysinternals

Cuando aceptas el EULA de una aplicación de SysInternals, se crea un valor DWORD con nombre "EulaAccepted" en la clave del programa, que en este caso es:
HKEY_CURRENT_USER\Software\Sysinternals\ZoomIt

Saludos
#5678
Scripting / Re: Duda muy básica
7 Febrero 2015, 17:45 PM
También puedes hacerlo de esta manera, usando la función join para concatenar los elementos de la lista usando el string especificado:

Código (python) [Seleccionar]
values = range(1, 31)
print ','.join(map(str, values))


Output:
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

Edito: Obviamente si lo prefieres puedes utilizar la secuencia directamente, te lo he escrito así para denotar la diferencia entre los datatypes, ya que estás aprendiendo.

Saludos.
#5679
Cita de: nevachana en  6 Febrero 2015, 16:59 PMsabrías qué falla aquí?

Porfavor, cuando formules una pregunta sobre un error expecífico, asegúrate de MOSTRAR el mensaje de la excepción.

Muestra la información necesaria para intentar ayudarte, ese método tiene muchos overloads y puede dar muchos errores distintos, que podrías solucioanrlo viendo la documentación oficial.

De todas formas me imagino que estás teniendo una excepción del tipo UnsuportedImageFormatException, ya que para el objeto template estás utilizando el constructor del Bitmap que por defecto asigna un canal ARGB de 32bpp, y aparte de eso estas asignando manualmente en el otro bitmap el mismo canal y profundidad de bits, y ese tipo de formato no está soportado por el método en cuestión, simplemente usa el formato de pixel a Format24bppRgb.

Saludos
#5680
Cita de: MAMOJI en  6 Febrero 2015, 13:30 PM
Código (dos) [Seleccionar]
@echo off echo Respaldando...
echo Renombrando con %date%
set FECHA= %date%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%
xcopy "C:\Documents\log" "C:\Documents\log\%FECHA%" /e/c/h/k/o/x/y


Pero... vamos a ver, ahí no estás renombrando ningún archivo.

No has dado datos suficientes sobre los archivos ni sobre la forma en lo que lo quieres estructurar, intentar dar datelles específicos sobre el formato del renombrado.

De hecho, no has especificado claramente que es realmente la ayuda que precisas, si renombrar, mover el directorio, comprobar duplicados, todo, nada, o que es lo buscas... se más específico.

De todas formas Batch es una herramienta muy limitada y es el "lenguaje" más inapropiado para este tipo de tareas, ya que para renombrar archivos con el formato que propones no puedes hacer la substracción necesaría del string de forma natural, y el código se vuelve demasiado tedioso.

Con Batch no puedes buscar duplicados, ya que no puedes hacer una comparación del CRC, ni mucho menos una comparación byte a byte, Batch no es capaz ni dispone de ningun comando externo para dichas tareas.




Si no he entendido mal, todas las imágenes contienen un guión en el nombre, y quieres reemplazar todo lo que esté después de dicho guión, por la fecha actual?,
en ese caso:

Código (dos) [Seleccionar]
@Echo OFF

Set "today=%date:~0,2%%date:~3,2%%date:~6,4%"

For %%# in ("*.jpg") Do (
   Call :Replace "%%~n#" "%today%"
   Echo Nombre original  : "%%~nx#"
   Call Echo Nombre modificado: "%%replaceResult%%%%~x#"
   :: Renombrar archivo...
REM Call Rename "%%~f#" "%%replaceResult%%%%~x#"
)
Pause&Exit

:Replace :: %1=value, %2=replacement
Set "value=%~1"
Call Set "removed=%%value:*_=%%"
Call Set "replaceResult=%%value:%removed%=%%"
Call Set "replaceResult=%%value:%removed%=%%"
Set "replaceResult=%replaceResult%%~2"
Goto:EOF


Si los nombres de los archivos usan otros patrones distintos que necesiten un filtrado/análisis más profundo entonces olvídate de usar Batch, cualquier otro lenguaje te servirá de mayor utilidad para hacer lo mismo y mejor.

Saludos