VBA cambia a string una variable definida como Date

He definido las variables finicio y ffin como Date para guardar fechas introducidas con dos inputbox. ffin se mantiene como Date pero finicio se convierte a String. Las dos variables reciben exactamente el mismo trato.

Forzando la conversión a Date con CDate(finicio) sí funciona pero me gustaría saber por qué esta ocurriendo esto…

Sub CalculadoraAños()      Sheets("Calculadora").Activate      Dim fn, fMax, fMin, finicio, ffin As Date      'Fecha actual     fn = Date     Range("D4") = fn      'Fecha maxima     fMax = DateAdd("m", -1, fn)     Range("D6") = fMax      'Fecha minima     fMin = DateAdd("yyyy", -5, fn)     Range("D5") = fMin      'Fecha inicio     finicio = InputBox("Pega la fecha de inicio: ")     Range("D7") = finicio       'Fecha fin     ffin = InputBox("Pega la fecha de fin: ")     Range("D8") = ffin  End Sub 

¿Como puedo saber cuando le cambia el estilo a un elemento?

Hola tengo un gif que se muestra durante ciertas peticiones del ajax lo muestro con el .show() y lo oculto con el hide() hasta ahi todo normal, y tengo una función que se encarga de de arrojar una alerta si el tiempo durante el que se muestra el gif excede lo normal del tiempo,

esta es la función

    var totalTiempo=5;  function updateReloj(){      if(totalTiempo==0){     $  ('#LoadingImage').hide();     alert("Excede el tiempo");      }else if($  ('#LoadingImage').is(':visible')){         /* Restamos un segundo al tiempo restante */         totalTiempo-=1;         /* Ejecutamos nuevamente la función al pasar 1000 milisegundos (1 segundo) */         setTimeout("updateReloj()",1000);     };  }; 

este funciona normal ahora mi problema es el siguiente me gustaria saber si hay alguna manera de que se detecte cuando el LoadingImage cambia su estilo de hide a show y viceversa probé con estos métodos

if($  ('#LoadingImage').is(':visible')){       //Cambio a visible        updateReloj();   }; 

pero que pasa ese codigo lo tendria que poner despues de un show para que funcione entonces pense en poner un Change, pero este no me dectecta cuando cambia el LoadingImage de show() a hide() y viceversa y no se como hacer para que el change detecte eso.

si bien es cierto que puedo poner una llamada de la función después de cada show para mi seria mucho mejor un change del LoadingImage

componente para selecionar fecha y JSpinner en una tabla cambia la informacion en las otras filas

Buen Dia Necesito de su ayuda para solucionar dos problemas. inserte un componente para seleccionar fecha en una columna de una tabla y un JSpinner tambien. de la siguiente manera:

Tengo una libreria la cual me ayuda a usar el componente para usar las fechas llamada

RSCalendar

introducir la descripción de la imagen aquí

-tengo una clase llamada tabla_spinner, la cual es la misma para el componente de las fechas

package clases;  import java.awt.Component; import javax.swing.AbstractCellEditor; import javax.swing.JSpinner; import javax.swing.JTable; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer;  /**  *  * @author ANGELICA  */ public class tabla_spinner extends AbstractCellEditor implements TableCellRenderer,TableCellEditor{     JSpinner spinner=new JSpinner();     Object valorActual;        @Override     public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {         return spinner;//y retornamos el label     }     @Override     public Component getTableCellRendererComponent         (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {          //si el datos es un objetc osea jlabel         if (value instanceof JSpinner) {             spinner=(JSpinner) value;//lo convertimos a JLabel              return spinner;//y retornamos el label         }          return spinner;     }     @Override     public Object getCellEditorValue() {         return spinner;     }  } 

-y con el siguiente codigo añado el JSpinner y el componente RSCalendar a las tablas

    TableColumn Tcolfechachooser=vencimiento_productos_tabla.getColumnModel().getColumn(1);              Tcolfechachooser.setCellEditor(new tabla_fechachosser());     Tcolfechachooser.setCellRenderer(new tabla_fechachosser());      TableColumn Tcolspinner=vencimiento_productos_tabla.getColumnModel().getColumn(3);     Tcolspinner.setCellEditor(new tabla_spinner());       Tcolspinner.setCellRenderer(new tabla_spinner());      modelo_vencimiento_productos=(DefaultTableModel) vencimiento_productos_tabla.getModel();     Object nuevafila[]={"","","","",""};     modelo_vencimiento_productos.addRow(nuevafila); 
  1. mi problema es que por ejemplo con el JSpinner selecciono un numero en una fila por ejemplo fila (1), y cuando selecciono otra fila por ejemplo fila (2), esta fila seleccionada (la 2) en la columna en la que esta el JSpinner se transfiere el numero de la anterior fila(1). exactamente ocurre con la celda en la cual esta el componente donde selecciono la fecha.Osea que en conclucion el codigo que estoy usando hara esto con todos los componentes.

introducir la descripción de la imagen aquí

  1. mi segundo problema es al tratar de obtener estos datos del JSpinner y el componente para selecionar las fechas. con el siguiente codigo:

    String fecha=String.valueOf(modelo_vencimiento_productos.getValueAt(vencimiento_productos_tabla.getSelectedRow(),1));

    String dias=String.valueOf(modelo_vencimiento_productos.getValueAt(vencimiento_productos_tabla.getSelectedRow(),3));

lo que me recolecta es esto:

-para la fecha:

rojeru_san.componentes.RSDateChooser[,-192,-20,0x0,invalid,layout=javax.swing.GroupLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777217,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=240,height=40]] 

-para el numero del JSpinner

javax.swing.JSpinner[,-193,-20,0x0,invalid,layout=javax.swing.plaf.basic.BasicSpinnerUI$  Handler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$  CompoundBorderUIResource@2df0c8a,flags=328,maximumSize=,minimumSize=,preferredSize=] 

¿Cómo evitar que una ruta de MapViewDirections se recargue si la ubicación actual cambia?

Mi problema es que cuando se genera una ruta en mi aplicación, cada que la ubicación actual cambia, MapViewDirections se vuelve a cargar y hace que tenga errores cuando no hay conexión a internet

Mi idea es que cuando se genere la ruta, y no haya conexión a internet, vaya desapareciendo la linea conforme se avanza, sin que se recargue la ruta.

Todo esto para que trabaje offline la app.

Se puede hacer que solo una vez se cargue la ruta sin ver la ubicación actual mientras esté desplegada la ruta?

Mi código está implementado de la siguiente manera.

class HomeScreen extends React.Component {    static navigationOptions = ({ navigation }) => {     return {       headerTitle: ('',         <Image style={{ width: 150, height: 40 }}           source={require('./images/mibici.png')}         />       ),        //Use navigations.getParam to access get access to menu, because this is static and cannot access by itself       headerLeft: (         <TouchableHighlight onPress={navigation.getParam('menu')}>           <Image style={{ width: 50, height: 40 }}             source={require('./images/hamburger_icon.png')}           />         </TouchableHighlight>       ),      };   };    constructor(props) {     super(props);     this.state = {      ...AbortController     }   }     state = {     mapRegion: null,     lastLat: null,     lastLong: null   }    componentDidMount() {     this.watchID = navigator.geolocation.watchPosition((position) => {       // Creating the object to update this.state.mapRegion through the onRegionChange function and calculates the zoom of the first run       let region = {         latitude: position.coords.latitude,         longitude: position.coords.longitude,         latitudeDelta: LATITUDE_DELTA,         longitudeDelta: LONGITUDE_DELTA,       }       this.onRegionChange(region, region.latitude, region.longitude);     }, (error) => console.log(error));   }     onRegionChange(region, lastLat, lastLong) {     this.setState({       mapRegion: region,       // If there are no new values set the current ones       lastLat: lastLat || this.state.lastLat,       lastLong: lastLong || this.state.lastLong     });     currentLocation = { latitude: this.state.lastLat, longitude: this.state.lastLong }     this.setState({       currentLocation: currentLocation //created to get the current location for creating routes     })   }    componentWillUnmount() {     navigator.geolocation.clearWatch(this.watchID);   }     render() {      const predictions = this.state.predictions.map(prediction => (       <TouchableHighlight         onPress={() =>           this.getRouteDirections(             //prediction.structured_formatting.main_text //Simple and short location text             prediction.description //For detailed location text           )         }       >         <View>           <Text style={styles.suggestions}> {prediction.description} </Text>         </View>       </TouchableHighlight>     ));      Geocoder.init(GOOGLE_MAPS_API_KEY);      return (       <View style={{ flex: 1 }}>         <TextInput           style={styles.mapSearch}           placeholder="Empecemos escribiendo tu destino..."           onChangeText={             destination => {               this.onChangeDestinationDebounced(destination)             }           }         />          {predictions}          {this.checkConnection()}          <MapView           provider={PROVIDER_GOOGLE}           style={{ flex: 1 }} //Shows map in full view           region={this.state.mapRegion} //The map centers in the current position of user           showsUserLocation={true}           showsMyLocationButton={true} //Button to ubicate the current location in the center           loadingEnabled={true}           //showsTraffic={true}           cacheEnabled={true}           showsScale={true}           //customMapStyle={customMap}         >           <MapViewDirections             origin={this.state.currentLocation}             waypoints={this.state.waypointStation}             destination={this.state.finalDestination}             apikey={GOOGLE_MAPS_API_KEY}             strokeWidth={4} //Sets how widht you want the line of the generated route             strokeColor="#B82C2C"//Sets the color you want the line of the generated route             mode="bicycling"             language="es"             optimizeWaypoints={true}              ref={c => this.mapView = c}             onPress={this.onMapPress}              onReady={result => {               var numeral = require('numeral');               const distanceMax = numeral(result.distance).format('0')               var distance = numeral(result.distance).format('0.00')               var duration = numeral(result.duration).format('0,0')                Alert.alert(                 'Aquí tienes información sobre tu viaje',                 'Distancia: ' + distance + ' km \n Duración: ' + duration + ' minutos',                 [                   { text: '¡Empecemos!', onPress: () => this.setState({ startPressed: true }) },                   { text: '¿No era lo que querías?', onPress: () => this.setState({ finalDestination: '', startPressed: false }) }                 ]               )               ShowedOnceOnReady = true              }             }           />            {this.state.markers.map(marker => (             <Marker               coordinate={marker.coordinate}               title={marker.title}               description={marker.description}               pinColor='#5882FA'             />           ))}          </MapView>          {this.state.startPressed == true ?           <TouchableOpacity             style={styles.cancelButton}             onPress={this._cancelTravel}           >             <Text style={styles.cancelButtonText}> Cancelar viaje </Text>           </TouchableOpacity>           : null}        </View >     )   } }

¿Es posible disparar un evento cuando un item de un ListViewCollection cambia?

estoy trabajando hace poco en WPF, y me ha surgido una duda.

Tengo dos ViewModel,

public class Foo {     public string Ejemplo { get; set; }     public bool Checked { get; set; }       }  public class Bar {     private ObservableCollection<Foo> mFooList;     public ListCollectionView FooList { get; set; }     public Bar()     {         //Lleno la lista observable          FooList = new ListCollectionView(mFooList);        } } 

Hasta este punto, todo funciona correcto, ya que FooList es Filtrable y editable a su vez.

El ViewModel Bar se representaría visualmente con un DataGrid en el cual aparecerá el string Ejemplo en una columna, y en otra un CheckBox que permita la posibilidad de chequear la fila correspondiente.

Lo manejo de la siguiente manera:

<DataGrid Grid.Row="1"     AutoGenerateColumns="False"     ItemsSource="{Binding FooList}"     CanUserAddRows="False" CanUserDeleteRows="False"     d:DataContext="{d:DesignInstance Type=viewModels:Foo}" >     <DataGrid.Columns>         <DataGridTextColumn Header="Ejemplo" Binding="{Binding Path=Ejemplo}" IsReadOnly="True"/>                         <DataGridTemplateColumn Header="Debe exportarse?" >                 <DataGridTemplateColumn.CellTemplate>                 <DataTemplate>                     <CheckBox IsChecked="{Binding Path=Checked, UpdateSourceTrigger=PropertyChanged}"/>                 </DataTemplate>             </DataGridTemplateColumn.CellTemplate>         </DataGridTemplateColumn>     </DataGrid.Columns> </DataGrid> 

El asunto, es que necesito detectar cuando un CheckBox es tildado, o destildado, pero no estoy logrando detectarlo con el ViewModel mediante INotifyPropertyChanged ni bindear un Command en la propiedad Checked del CheckBox

¿Cómo debo notificar a la vista para poder reaccionar a un cambio en la columna de los CheckBox?

Gracias!

Scraping con pagina que no cambia la Url al actualizar

Estaba probando algo de scraping y llegue a esta duda:

Tengo esta Url.

Muestra en una tabla información, por defecto muestra 50 datos en la tabla, luego tiene un input que si se pone un valor hasta 252 y se da enter actualiza la web sin cambiar la url y muestra en la tabla el máximo de datos (252). Con el siguiente código puedo traer los que se cargan por defecto, como podría hacer para que el json que se crea traiga los 252, no entiendo mucho todavía y me estoy guiando por la documentación.

import requests import urllib.request import pandas as pd import re import json from bs4 import BeautifulSoup  url = 'https://report.boonecountymo.org/mrcjava/servlet/SH01_MP.I00290s' path_file_dest = r'JailResidents.json' response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)'})  def write_doc_json(content, mode):     own_file = open(path_file_dest, mode, encoding='utf-8')     own_file.write(content.decode('utf-8'))     own_file.close()  if response.status_code == 200:      info = []     soup = BeautifulSoup(response.text, "html.parser")      odd = soup.findAll('tr', attrs={'class': 'odd'})      even = soup.findAll('tr', attrs={'class': 'even'})      for x in range (1, (len(even) - 1)):         Last_Name = even[x].find('td', {'data-th': 'Last Name'}).get_text()         First_Name = even[x].find('td', {'data-th': 'First Name'}).get_text()         Middle_Name = even[x].find('td', {'data-th': 'Middle Name'}).get_text()         Sex = even[x].find('td', {'data-th': 'Sex'}).get_text()         Race = even[x].find('td', {'data-th': 'Race'}).get_text()         Age = even[x].find('td', {'data-th': 'Age'}).get_text()         City = even[x].find('td', {'data-th': 'City'}).get_text()         State = even[x].find('td', {'data-th': 'State'}).get_text()          individuo = {'Apellido' : Last_Name,                       'Nombre' : First_Name,                       'Segundo Nombre' : Middle_Name,                      'Sexo' : Sex,                      'Raza' : Race,                      'Edad' : Age,                      'Ciudad' : City,                      'Estado' : State}          info.append(individuo)      for x in range (0,len(odd)):         Last_Name = odd[x].find('td', {'data-th': 'Last Name'}).get_text()         First_Name = odd[x].find('td', {'data-th': 'First Name'}).get_text()         Middle_Name = odd[x].find('td', {'data-th': 'Middle Name'}).get_text()         Sex = odd[x].find('td', {'data-th': 'Sex'}).get_text()         Race = odd[x].find('td', {'data-th': 'Race'}).get_text()         Age = odd[x].find('td', {'data-th': 'Age'}).get_text()         City = odd[x].find('td', {'data-th': 'City'}).get_text()         State = odd[x].find('td', {'data-th': 'State'}).get_text()          individuo = {'Apellido' : Last_Name,                       'Nombre' : First_Name,                       'Segundo Nombre' : Middle_Name,                      'Sexo' : Sex,                      'Raza' : Race,                      'Edad' : Age,                      'Ciudad' : City,                      'Estado' : State}          info.append(individuo)      content = json.dumps(info, indent=4, sort_keys=True, ensure_ascii=False).encode('utf-8')     write_doc_json(content ,'w+')     data = pd.read_json(path_file_dest, encoding = 'UTF-8') else:     print('No se pudo conectar')  data 

introducir la descripción de la imagen aquí

Llegue a esto al buscar pero no se como hacerlo, los datos no existen al cargar la pagina:

El problema es que cuando la pagina tiene javascript y es dinamica cuando haces el request a la pagina la informacion aun no esta en el html.

Para resolver eso lo primero que suelo hace es mediante Postman Interceptor intercepto las solicitudes mientras accedo normalmente con el navegador a la pagina donde esta la informacion.

Luego de eso identifica la solicitud hecha con javascript o ajax que retorna la informacion que quieres y una vez identifiques el la solicitud replicala tu mismo con python bien sea con urlopen o requests.

Una vez lo consigas extrae la informacion de la respuesta de dicho request con BeutifulSoup u otra cosa