Using one of readxl example files for reproducible example, you can open its location by running browseURL(dirname(readxl_example("type-me.xlsx"))), though the sheet looks like this:

library(readxl) library(dplyr) xlsx <- readxl_example("type-me.xlsx") # open file location explorer: # browseURL(dirname(readxl_example("type-me.xlsx"))) # by default blank cells are treated as missing data, note the single <NA>: df <- read_excel(xlsx, sheet = "text_coercion") %>% head(n = 2) df #> # A tibble: 2 × 2 #> text explanation #> <chr> <chr> #> 1 <NA> "empty" #> 2 cabbage "\"cabbage\"" # add "empty" to na vector, note 2 <NA> values: df <- readxl::read_excel(xlsx, sheet = "text_coercion", na = c("", "empty")) %>% head(n = 2) df #> # A tibble: 2 × 2 #> text explanation #> <chr> <chr> #> 1 <NA> <NA> #> 2 cabbage "\"cabbage\"" # to replace all(!) NA values with "" df[is.na(df)] <- "" df #> # A tibble: 2 × 2 #> text explanation #> <chr> <chr> #> 1 "" "" #> 2 "cabbage" "\"cabbage\""
Created on 2023-01-26 with reprex v2.0.2
Note from your screenshot: you have column names in the first row of your dataframe, this breaks data type detection (everything is chr) and you should deal with that first; at that point data[is.na(data)] <- "" will no longer work as you can not write strings to numerical columns. And it's perfectly fine.
{r} data <- read_excel(workbook_path, na = c("", "NA")) print(data) colSums(is.na(data))I keep seeing 0 which means I have NAs still