Question: I have tried answers posted [here](https://stackoverflow.com/questions/45244238/importerror-no-module-named-xlrd) 

But I still can't fix the same issue.
Here is my python code:

```
import xlrd
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile

df = pd.read_excel('airquality.xlsx')

print("Column headings:")
print(df.columns)

:!python 'readexcel.py'

Traceback (most recent call last):
  File "readexcel.py", line 1, in <module>
    import xlrd
ImportError: No module named xlrd
shell returned 1

```

While I check the xlrd it shows it has been satisfied:

```
$python --version
Python 3.6.9
$ pip3 install xlrd
Requirement already satisfied: xlrd in /usr/local/lib/python3.6/dist-packages (1.2.0)

```

while in terminal, it seems no issue:

```
    python
    Python 3.6.9 (default, Nov  7 2019, 10:44:02)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import xlrd
    >>>

```

Answer: 
You are sending your elements to your method(**seConnecter**) . modify your html like the following:

```
  <button type="submit" class="btn btn-success" (click)='seConnecter(email.value,password.value)'>Submit</button>

```

**Edit** : 

define a model :

```
export interface LoginModel {
  email: string;
  password: string;
}

```

your html :

```
<form (submit)="seConnecter($event)">
  <div class="form-group">
    <label for="name">E-mail :</label>
    <input type="email" class="form-control" required #email="ngModel" [(ngModel)]="this.model.email" />
  </div>
  <div class="form-group">
    <label for="alterEgo">Password :</label>
    <input type="text" class="form-control" required #password="ngModel" [(ngModel)]="this.model.password" />
  </div>
  <div class="form-group">
    <input type="submit" value="submit" />
  </div>
</form>

```

typescript:

```
  seConnecter(event: Event) {
    event.preventDefault();
    this.authService.signInUser(this.model.email, this.model.password).then(
      () => {
        alert('Welcome ' + this.model.email);
        this.router.navigate(['']);
      },
      (error) => {
        console.log('Connection Problem ' + error);
        alert('Account inaccessible');
      }
    );
  }

```

another way , based on your question is, modify the type of your button element to button instead of submit :

```
<form>
  <div class="form-group">
    <label for="name">E-mail :</label>
    <input type="email" class="form-control" required id="email" #email>
  </div>

  <div class="form-group">
    <label for="alterEgo">Password :</label>
    <input type="password" class="form-control" required id="password" #password>
  </div>
  <button type="button" class="btn btn-success" (click)='seConnecter(email.value,password.value)'>Submit</button>
</form>

```

typescript :

```
  seConnecter(email: string,password: string)
  { 
     ...
  }

```
Your issue is that `seConnecter()`is missing the correct parameters:

This should work:

```
 seConnecter(email, password)
 {
 this.authService.signInUser(email,password).then(
  () => {
    alert('Welcome '+ email);
    this.router.navigate(['']);
  },
    (error) => {
       console.log('Connection Problem '+error);
       alert('Account inaccessible');
      }
    );
 }

```